Skip to content

Commit 19a3fc5

Browse files
committed
Refactoring in rp-state directive
1 parent c6d6d95 commit 19a3fc5

File tree

2 files changed

+53
-37
lines changed

2 files changed

+53
-37
lines changed

dist/angular-permission.js

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/**
22
* angular-permission
33
* Route permission and access control as simple as it can get
4-
* @version v0.3.0 - 2015-07-09
4+
* @version v0.3.0 - 2015-07-10
55
* @link http://www.rafaelvidaurre.com
66
* @author Rafael Vidaurre <narzerus@gmail.com>
77
* @license MIT License, http://www.opensource.org/licenses/MIT
@@ -149,28 +149,36 @@
149149
return directive;
150150

151151
function link(scope, element, attrs) {
152-
var states = $state.get();
153-
var uiStateName = attrs.uiSref;
154-
var currentState = states.filter(function (route) {
155-
return (route.name === uiStateName);
156-
});
157-
var currentState = currentState[0];
158-
159-
if (currentState.data && currentState.data.permissions)
160-
{
161-
var isOnlyPermission = (currentState.data.permissions.only ? true: false);
152+
var stateConfig = getStateConfiguration(attrs.uiSref);
162153

163-
var roles = (isOnlyPermission ? currentState.data.permissions.only : currentState.data.permissions.except);
164-
roles = roles.join(",");
154+
if (stateConfig.data && stateConfig.data.permissions)
155+
{
156+
var roles = getRolesFromStateConfiguration(stateConfig);
165157

166158
var customAttributes = {};
167-
customAttributes[(isOnlyPermission ? directives.only : directives.except)] = roles;
159+
var rule = (stateConfig.data.permissions.only ? directives.only : directives.except);
160+
customAttributes[rule] = roles;
168161

169-
var ruleDirectiveName = (currentState.data.permissions.only ? directives.only : directives.except);
170-
171-
checkPermissions(ruleDirectiveName, element, customAttributes, Permission);
162+
checkPermissions(rule, element, customAttributes, Permission);
172163
}
164+
}
165+
166+
function getStateConfiguration(stateName){
167+
var states = $state.get();
168+
var stateConfiguration = states.filter(function (route) {
169+
return (route.name === stateName);
170+
});
171+
172+
if(stateConfiguration.length == 0) {
173+
throw new Error('State is not defined in the router config');
174+
}
173175

176+
return stateConfiguration[0];
177+
}
178+
179+
function getRolesFromStateConfiguration(stateConfig) {
180+
var roles = (stateConfig.data.permissions.only ? stateConfig.data.permissions.only : stateConfig.data.permissions.except);
181+
return roles.join(",");
174182
}
175183
}
176184

@@ -326,21 +334,21 @@
326334
var deferred = $q.defer();
327335
Permission._findMatchingRole(roles, toParams).then(function () {
328336
// Found role match
329-
deferred.resolve(true);
337+
deferred.resolve();
330338
}, function () {
331339
// No match
332-
deferred.reject(false);
340+
deferred.reject();
333341
});
334342
return deferred.promise;
335343
},
336344
rejectIfMatch: function (roles, toParams) {
337345
var deferred = $q.defer();
338346
Permission._findMatchingRole(roles, toParams).then(function () {
339347
// Role found
340-
deferred.reject(false);
348+
deferred.reject();
341349
}, function () {
342350
// Role not found
343-
deferred.resolve(true);
351+
deferred.resolve();
344352
});
345353
return deferred.promise;
346354
},

src/permission.drv.js

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -65,28 +65,36 @@
6565
return directive;
6666

6767
function link(scope, element, attrs) {
68-
var states = $state.get();
69-
var uiStateName = attrs.uiSref;
70-
var currentState = states.filter(function (route) {
71-
return (route.name === uiStateName);
72-
});
73-
var currentState = currentState[0];
74-
75-
if (currentState.data && currentState.data.permissions)
76-
{
77-
var isOnlyPermission = (currentState.data.permissions.only ? true: false);
68+
var stateConfig = getStateConfiguration(attrs.uiSref);
7869

79-
var roles = (isOnlyPermission ? currentState.data.permissions.only : currentState.data.permissions.except);
80-
roles = roles.join(",");
70+
if (stateConfig.data && stateConfig.data.permissions)
71+
{
72+
var roles = getRolesFromStateConfiguration(stateConfig);
8173

8274
var customAttributes = {};
83-
customAttributes[(isOnlyPermission ? directives.only : directives.except)] = roles;
75+
var rule = (stateConfig.data.permissions.only ? directives.only : directives.except);
76+
customAttributes[rule] = roles;
8477

85-
var ruleDirectiveName = (currentState.data.permissions.only ? directives.only : directives.except);
86-
87-
checkPermissions(ruleDirectiveName, element, customAttributes, Permission);
78+
checkPermissions(rule, element, customAttributes, Permission);
8879
}
80+
}
81+
82+
function getStateConfiguration(stateName){
83+
var states = $state.get();
84+
var stateConfiguration = states.filter(function (route) {
85+
return (route.name === stateName);
86+
});
87+
88+
if(stateConfiguration.length == 0) {
89+
throw new Error('State is not defined in the router config');
90+
}
91+
92+
return stateConfiguration[0];
93+
}
8994

95+
function getRolesFromStateConfiguration(stateConfig) {
96+
var roles = (stateConfig.data.permissions.only ? stateConfig.data.permissions.only : stateConfig.data.permissions.except);
97+
return roles.join(",");
9098
}
9199
}
92100

0 commit comments

Comments
 (0)