-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathangular-authz.js
89 lines (87 loc) · 3.33 KB
/
angular-authz.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'use strict';
angular.module('neo-angular-authz', []);
angular.module('neo-angular-authz').factory('permissionService', function () {
var permission = {};
permission.inited = false;
permission.data = new Map();
permission.init = function(permissionList){
permission.data.clear();
if(window.localStorage){
window.localStorage.setItem("permission",JSON.stringify(permissionList))
}else{
console.error("初始化权限错误!","不支持window.localStorage");
}
}
permission.buildData = function(){
var permissionList = [];
if(window.localStorage){
permissionList = JSON.parse(window.localStorage.getItem("permission"));
}else{
console.error("初始化权限错误!","不支持window.localStorage");
}
if(permissionList instanceof Array){
angular.forEach(permissionList,function(ele,index){
if(ele && ele.key && ele.value){
permission.data.set(ele.key,ele.value)
}
})
permission.inited = true;
}else{
console.error("初始化权限错误!权限格式不对");
}
}
permission.hasSingle = function(permissionName){
return permission.data.has(permissionName);
}
permission.hasArray = function(permissionName){
var array = []
if("&&".indexOf(permissionName) > -1){
array = permissionName.split("&&");
var i = 0,size=array.length,result =true;
while(i<size){
if(!permission.hasSingle(array[i])){
result = false;
break;
}
i++;
}
return result;
}
if("||".indexOf(permissionName) > -1){
array = permissionName.split("||");
var i = 0,size=array.length,result =false;
while(i<size){
if(permission.hasSingle(array[i])){
result = true;
break;
}
i++;
}
return result;
}
}
permission.has = function(permissionName){
if(!permission.inited){
permission.buildData();
}
return permissionName && (permissionName.indexOf("&&")>0 || permissionName.indexOf("||")>0) ? permission.hasArray(permissionName) :permission.hasSingle(permissionName);
}
return permission;
});
angular.module('neo-angular-authz').directive('hasPermission', [
'permissionService',
function (permissionService) {
return {
priority: 1000,
restrict: 'A',
compile: function (element, attr) {
return function ($scope, $element, $attr) {
var permission = $attr.hasPermission;
if(!permissionService.has(permission)){
angular.element($element).remove();
}
};
}
};
}
]);