AngularJS - 权限指令

时间:2013-03-12 13:45:00

标签: permissions angularjs user-permissions directive

我正在尝试编写指令 将评估用户权限

如果不允许用户查看给定内容

  1. 内容不会显示(已完成,工作正常)

  2. 来自权限指令内的控制器的请求将无法获取 烧成。

  3. 示例:

    控制器:

    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中检查权限,但我不想。

    感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您的问题是在链接功能执行之前始终会调用控制器。请参阅this fiddle

function MyCtrl($scope) {
    console.log('in controller');
}

myApp.directive('permission', function() {
    return {
        restrict: 'E',
        link: function(scope, element, attrs) {
            console.log('in link');

日志显示:

in controller
in link

答案 1 :(得分:1)

我尝试了另一种方法并将元素删除到编译函数中。根据日志,它是在控制器之前执行的,所以它是正确的地方。无论如何,请求仍然被解雇。所以我尝试了一个盲目的删除元素儿童(我知道,它没有意义,删除元素应该是足够的,应该删除孩子也。)

但它有效!

compile: function(element) { var children = element.children(); children.remove(); element.remove(); }

它正在运作,但我不确定它有多好(例如未来的版本Ang。)

答案 2 :(得分:-1)

如果我是你,我会打电话给服务器并检查他们是否有权访问。

使用指令执行此操作并不合理。

指令通常用于操作dom,这是授权确认通常应该在控制器中处理,然后让触发器的结果成为事件。

然后让你的指令监听该事件,并在他们从服务器获得访问权限时操纵dom。

否则,任何人都可以轻松地注入他们想要的任何内容并查看您的管理面板。

如果您不确定我的意思,请告诉我如果您需要,我可以扩大答案。