(function() { 'use strict'; var app = angular.module('app', []); app.factory('app.svc.auth', [svcAuth]); app.directive('authorize', ['app.svc.auth', dirAuth]); app.controller('app.ctrl.grid', ['app.svc.auth', ctrlGrid]); function svcAuth() { //simple claims container for demo purposes var claims = { 'Name': 'Ozkary', 'Title': 'Tech', 'app.delete': true, 'app.edit': true, 'app.create': true }; function hasClaim(key) { return claims[key];//todo handle multiple claims } return { claims: claims, hasClaim:hasClaim }; } function dirAuth($svcAuth) { return { restrict: 'A', scope: true, link: function (scope, elem, attrs) { console.log('loading directive - ' + attrs.authorize); var watch = function () { //get the claim value var claims = attrs.authorize; if (claims) { var result = $svcAuth.hasClaim(claims); if (!result) { elem.hide(); } else { elem.show(); } } } //watch for the element binding scope.$watch(watch); } }; }; function ctrlGrid($svcAuth) { var ctrl = this; var storage = angular.copy($svcAuth.claims); ctrl.claims = $svcAuth.claims; ctrl.edit = function(key) { if (ctrl.selected === key) { ctrl.selected = null; } else { ctrl.selected = key; } } ctrl.remove = function(key){ delete ctrl.claims[key]; } ctrl.reset = function () { $svcAuth.claims = angular.copy(storage); ctrl.claims = $svcAuth.claims } } })();
<div ng-app="app"> <div class="body-content panel-body"> <div class="container-fluid"> <div class="row"> <div class="col-lg-12"> <h3 class="page-header">Directive Claims Authorization - ozkary.com</h3> </div> <!-- /.col-lg-12 --> </div> <div class="row" ng-controller="app.ctrl.grid as ctrl"> <div class="col-lg-12"> <div class="panel panel-default"> <div class="panel-heading"> My Claims </div> <!-- /.panel-heading --> <div class="panel-body text-center" > <ul class="list-group text-left"> <li ng-repeat="(key,value) in ctrl.claims" class="list-group-item"> <label style="width:150px;">{{key}}</label> <input type="text" class="form-control-static form-input" maxlength="25" ng-disabled="key !== ctrl.selected" ng-model="ctrl.claims[key]" /> <span class="pull-right"> <a authorize="app.delete" class="cursor-pointer" title="remove claim" ng-click="ctrl.remove(key)"><i class="fa fa-trash text-danger fa-2x"></i></a> <a authorize="app.edit" class="cursor-pointer" title="edit claim" ng-click="ctrl.edit(key)"><i class="fa fa-edit fa-2x"></i></a> </span> </li> </ul> </div> <!-- /.panel-body --> </div> <!-- /.panel --> </div> <!-- /.col-lg-12 --> </div> </div> </div> </div> <br/>