Угловая директива для отключения дочерних элементов

Можно ли создать директиву (canUpdate), которая позволит мне включать/отключать элементы моего приложения angular/web api в зависимости от результатов службы, которая будет проверять разрешения пользователей для данной группы пользователей или списка групп, разделенных запятыми.

Мое мышление:

<div><button can-update="customerMgmt">Edit customer detail</button></div>

и моя директива может выполнить вызов, чтобы проверить, что этот пользователь является частью группы customerMgmt и включить / отключить соответствующим образом.

Однако я изо всех сил пытаюсь визуализировать/понять, как будет выглядеть шаблон моих директив.

Если бы вы должны были написать директиву, которая выполняла бы этот тип операции, как бы выглядел шаблон html ваших директив, так как я хотел бы, чтобы это было применимо к любому элементу, вводу текста, кнопке, якорю, метке и т. д… я бы сказал, что если пользователь не находится в группе(группах), указанных в атрибуте, то отключите/не разрешайте ввод текста/щелчок и т. д…

1 ответ

  1. Так что я написал следующее, что «кажется«, чтобы выполнять, как я ожидаю на данный момент, нужно протестировать больше на следующей неделе, но, кажется, включение/выключение зависит от того, что мой permissionsService.метод permissionsForObject возвращает (который переходит к контроллеру webApi)…. Имеет ли это смысл для вас?

        (function () {
        'use strict';
    
        angular.module('blocks.permissions').directive('canWrite', canWriteDirective);
    
        function canWriteDirective() {
            return {
                //scope: {},
                restict: "A",
                controller: CanWriteController,
                controllerAs: "vm",
                bindToController: false,
                link: function (scope, iElement, iAttrs, controller) {
                    controller.canWrite(iAttrs.canWrite);
                }
            }
        };
    
        CanWriteController.$inject = ["permissionsService"];
    
        function CanWriteController(permissionService) {
    
            var vm = this;
            vm.canWrite = canWrite;
            vm.canUpdate = false;
    
            function canWrite(group) {
                permissionService.permissionsForObject(group).then(function (result) {
                    vm.canUpdate = true;
                }).catch(function (result) {
                    vm.canUpdate = false;
                });
            }
        }
    
    })();