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