Permissions AngularJS-权限指令
我正在尝试编写指令,该指令将评估用户权限 在不允许用户查看给定内容的情况下Permissions AngularJS-权限指令,permissions,angularjs,user-permissions,directive,Permissions,Angularjs,User Permissions,Directive,我正在尝试编写指令,该指令将评估用户权限 在不允许用户查看给定内容的情况下 将不显示内容(完成,工作正常) 来自权限指令内部控制器的请求将无法获取 解雇了 例如: 控制器: function MyController ($scope){ // performing imediately server request, witch is allowed only for admin // therefore i will get error when non admin use
function MyController ($scope){
// performing imediately server request, witch is allowed only for admin
// therefore i will get error when non admin user access this page
}
许可指令:
return {
priority: 1000,
restrict: 'E',
link: (scope, element, attrs) => {
var permission = attrs.permission;
if (/*evaluating permission*/) {
// user has permission, no work for me
return;
}
element.remove();
}
};
总而言之:
<permission permission="isAdmin">
<div ng-controller="MyController">
</div>
</permission>
此版本正在从DOM中删除元素,但MyController中的请求仍会执行。当然,我可以在MyController中检查权限,但我不想这样做
谢谢你的帮助。如果我是你,我会打电话给服务器,检查他们是否被授权访问 使用指令执行此操作实际上没有意义 指令通常用于操作dom,这是授权确认,通常应在控制器中处理,然后产生触发事件的结果 然后让您的指令监听该事件,并在dom从服务器获得访问权限时操作dom 否则,任何人都可以轻松地注入他们想要的任何东西,并查看您的管理面板
如果您不确定我的意思,请告诉我,如果需要,我可以扩展答案。您的问题是,在执行链接函数之前,始终会调用控制器。看 日志显示:
in controller
in link
我尝试了另一种方法,将元素的删除放到编译函数中。根据日志,它是在控制器之前执行的,所以它是正确的位置。无论如何,请求仍然被触发。所以我试着就像一个盲镜头一样删除元素子元素(我知道,这是没有意义的,删除元素应该足够了,也应该删除子元素) 但是成功了 编译:函数(元素){ var children=element.children(); children.remove();element.remove(); }
它正在工作,但我不确定它是否正常(例如,未来版本Ang.)基于这个答案,我尝试了另一种方法,并将元素的删除放到编译函数中。根据日志,它是在控制器之前执行的,所以它是正确的位置。无论如何,请求仍然被触发。所以我试着就像一个盲镜头一样删除元素子元素(我知道,这是没有意义的,删除元素应该足够了,也应该删除子元素)。但是成功了
compile:function(element){var children=element.children();children.remove();element.remove();}
-您对此有何看法?它正在工作,但我不确定它是否正常(例如,未来版本Ang.)@klesta,element.remove()在编译函数中似乎对我有效:。若我理解你们的一般方法,它会有更大的问题,因为有人可以修改你们的JavaScript并访问他们不应该访问的东西。他们可以修改它,例如查看管理部分,但不允许他们做任何事情,因为服务器不允许他们这样做(服务器甚至不允许他们取回他们无权取回的物品)@klesta,好的,很好。我在(错误的)下给人的印象是,您将隐藏只有管理员才应该看到的内容。服务器端受到保护……当未经授权的用户发出请求时,会有“无权”这样的回答。您的方式看起来对于相对简单的任务来说太费力了:)。控制器中不必要的权限代码。用于确定控件的用户权限的请求。。。也许我做得不对。-1使用指令非常有意义。考虑到服务器已经受到保护,您仍然需要根据权限在UI中隐藏/显示内容。使用指令使其方便是完全恰当的。是的,他误解了他的问题。我以为他只是想知道如何评估他的权限,但他没有意识到他只是指客户端。请告诉我们您是如何处理$http请求的。或者制作一个JSFIDLE。我想我知道你的问题是什么,但我想看看你的更多代码来确定。2雷:这只是一个标准的$http.post$http.post(地址、数据)。成功(succall)。错误(errCall)代码>我看不出这有什么关系。我已经发现,在编译中删除元素是可行的,但我不确定这是否是一个好的解决方案。我面临着同样的问题,你能发布整个代码吗?。你是如何修改链接函数的,还是只是在下面添加了这些行?
in controller
in link