|
1 | 1 | /**
|
2 | 2 | * angular-permission
|
3 | 3 | * 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 |
5 | 5 | * @link http://www.rafaelvidaurre.com
|
6 | 6 | * @author Rafael Vidaurre <narzerus@gmail.com>
|
7 | 7 | * @license MIT License, http://www.opensource.org/licenses/MIT
|
|
149 | 149 | return directive;
|
150 | 150 |
|
151 | 151 | 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); |
162 | 153 |
|
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); |
165 | 157 |
|
166 | 158 | 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; |
168 | 161 |
|
169 |
| - var ruleDirectiveName = (currentState.data.permissions.only ? directives.only : directives.except); |
170 |
| - |
171 |
| - checkPermissions(ruleDirectiveName, element, customAttributes, Permission); |
| 162 | + checkPermissions(rule, element, customAttributes, Permission); |
172 | 163 | }
|
| 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 | + } |
173 | 175 |
|
| 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(","); |
174 | 182 | }
|
175 | 183 | }
|
176 | 184 |
|
|
326 | 334 | var deferred = $q.defer();
|
327 | 335 | Permission._findMatchingRole(roles, toParams).then(function () {
|
328 | 336 | // Found role match
|
329 |
| - deferred.resolve(true); |
| 337 | + deferred.resolve(); |
330 | 338 | }, function () {
|
331 | 339 | // No match
|
332 |
| - deferred.reject(false); |
| 340 | + deferred.reject(); |
333 | 341 | });
|
334 | 342 | return deferred.promise;
|
335 | 343 | },
|
336 | 344 | rejectIfMatch: function (roles, toParams) {
|
337 | 345 | var deferred = $q.defer();
|
338 | 346 | Permission._findMatchingRole(roles, toParams).then(function () {
|
339 | 347 | // Role found
|
340 |
| - deferred.reject(false); |
| 348 | + deferred.reject(); |
341 | 349 | }, function () {
|
342 | 350 | // Role not found
|
343 |
| - deferred.resolve(true); |
| 351 | + deferred.resolve(); |
344 | 352 | });
|
345 | 353 | return deferred.promise;
|
346 | 354 | },
|
|
0 commit comments