2016-11-03 6 views
0

指定されたユーザのユーザ権限をテストするサービスの結果に応じて、角度/ Webアプリケーションの要素を有効/無効にするための指示文(canUpdate)を作成することは可能でしょうか?グループまたはコンマで区切られたグループのリスト。子要素を無効にする角度指令

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

と私のディレクティブは、このユーザーを確認するための呼び出しがcustomerMgmtグループの一部である実行し、適切に有効/無効にすることができます。

私の思考があります。

しかし、私は自分のディレクティブのテンプレートがどのように見えるかを視覚化/理解するのに苦労しています。

このタイプの操作を実行するディレクティブを書く場合は、ディレクティブのHTMLテンプレートのように見えますが、これは任意の要素、テキスト入力、ボタン、アンカー、ラベルなどに適用できます...私は基本的に、ユーザーが属性に指定されたグループに属していない場合、無効にする/テキストの入力/クリックを許可しないと言っています。

+0

組み込みディレクティブを使用しない理由:ng-disabled? –

+0

私は、ng-disabledを使用したいと思います。私はディレクティブにng-disabledを使用したいので、コードスニペットに表示されているようにディレクティブに文字列を渡すだけで、ディレクティブはng-disabledを切り替えるかどうかを知っています。意味をなさない? – CheGuevarasBeret

+0

AFAIK、すべての機能が無効になっているのは、ブール式の値を監視し、要素の無効な属性を設定/設定解除することです。現在のユーザーの権限と照合して、自分で再実装するのは簡単です。角度ソースコードを確認してください。しかし、ルート範囲に 'hasPermission()'関数を公開し、 'ng-disabled ="!hasPermission( 'customerMgmt') "'を使うこともできます。これは、 'ng-disabled ="!hasPermission( 'customerMgmt')|| form。$ invalid "などの他のecheckと許可チェックを組み合わせるほうがはるかに簡単です。 –

答えて

0

だから私は私が今のところ期待しているようにパフォーマンスを上げるには、来週よりテストする必要がありますが、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; 
      }); 
     } 
    } 

})();