Skip to content

Commit 125442e

Browse files
committed
refactor: Code cleanup
1 parent 2c8233d commit 125442e

File tree

3 files changed

+89
-20
lines changed

3 files changed

+89
-20
lines changed

src/authorization/Authorization.js

Lines changed: 75 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,50 @@
2525
* @returns {promise} $q.promise object
2626
*/
2727
function authorize(permissionsMap, toParams) {
28+
29+
if (isCompensatedMap(permissionsMap)) {
30+
return authorizeCompensatedMap(permissionsMap, toParams);
31+
}
32+
33+
return authorizeDecompensatedMap(permissionsMap, toParams);
34+
}
35+
36+
/**
37+
* Checks if provided map is compensated or not
38+
*
39+
* @param permissionMap {Object} Map of permission names
40+
* @returns {boolean}
41+
*/
42+
function isCompensatedMap(permissionMap) {
43+
return !!((angular.isArray(permissionMap.only[0])) || angular.isArray(permissionMap.except[0]));
44+
}
45+
46+
47+
/**
48+
* Checks authorization for complex state inheritance
49+
* @method
50+
* @private
51+
*
52+
* @param permissionMap {Object} Map of permission names
53+
* @param [toParams] {Object} UI-Router params object
54+
*
55+
* @returns {promise} $q.promise object
56+
*/
57+
function authorizeCompensatedMap(permissionMap, toParams) {
2858
var deferred = $q.defer();
2959

30-
var exceptPromises = resolveAccessRights(permissionsMap.except, toParams);
60+
var exceptPromises = resolveAccessRights(permissionMap.except, toParams);
3161

3262
$q.all(exceptPromises)
3363
.then(function (rejectedPermissions) {
3464
deferred.reject(rejectedPermissions);
3565
})
3666
.catch(function () {
37-
if (!permissionsMap.only.length) {
67+
if (!permissionMap.only.length) {
3868
deferred.resolve(null);
3969
}
4070

41-
var onlyPromises = resolveAccessRights(permissionsMap.only, toParams);
71+
var onlyPromises = resolveAccessRights(permissionMap.only, toParams);
4272

4373
$q.all(onlyPromises)
4474
.then(function (resolvedPermissions) {
@@ -52,6 +82,43 @@
5282
return deferred.promise;
5383
}
5484

85+
/**
86+
* Checks authorization for simple view based access
87+
* @method
88+
* @private
89+
*
90+
* @param permissionMap {Object} Map of permission names
91+
* @param [toParams] {Object} UI-Router params object
92+
*
93+
* @returns {promise} $q.promise object
94+
*/
95+
function authorizeDecompensatedMap(permissionMap, toParams) {
96+
var deferred = $q.defer();
97+
var exceptPromises = resolveStateAccessRights(permissionMap.except, toParams);
98+
99+
only(exceptPromises)
100+
.then(function (rejectedPermissions) {
101+
deferred.reject(rejectedPermissions);
102+
})
103+
.catch(function () {
104+
if (!permissionMap.only.length) {
105+
deferred.resolve(null);
106+
}
107+
108+
var onlyPromises = resolveStateAccessRights(permissionMap.only, toParams);
109+
110+
only(onlyPromises)
111+
.then(function (resolvedPermissions) {
112+
deferred.resolve(resolvedPermissions);
113+
})
114+
.catch(function (rejectedPermission) {
115+
deferred.reject(rejectedPermission);
116+
});
117+
});
118+
119+
return deferred.promise;
120+
}
121+
55122
/**
56123
* Performs iteration over list of defined access rights looking for matches
57124
* @method
@@ -63,7 +130,7 @@
63130
* @returns {Array} Promise collection
64131
*/
65132
function resolveAccessRights(accessRightSet, toParams) {
66-
if (accessRightSet.length === 0) {
133+
if (!accessRightSet.length) {
67134
return [$q.reject()];
68135
}
69136

@@ -83,6 +150,10 @@
83150
* @returns {Array}
84151
*/
85152
function resolveStateAccessRights(stateAccessRights, toParams) {
153+
if (stateAccessRights.length === 0) {
154+
return [];
155+
}
156+
86157
return stateAccessRights.map(function (accessRightName) {
87158
if (RoleStore.hasRoleDefinition(accessRightName)) {
88159
var role = RoleStore.getRoleDefinition(accessRightName);

src/core/permissionModule.js

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@
8989
* @method
9090
* @private
9191
*
92-
* @returns {PermissionMapFactory} Permission map
92+
* @returns {permission.PermissionMap} Permission map
9393
*/
9494
function compensatePermissionMap() {
9595
var permissionMap = new PermissionMap();
@@ -118,7 +118,7 @@
118118
* @method
119119
* @private
120120
*
121-
* @param permissionMap {PermissionMapFactory} Map of permission names
121+
* @param permissionMap {permission.PermissionMap} Map of permission names
122122
*/
123123
function authorizeForState(permissionMap) {
124124
Authorization
@@ -127,7 +127,7 @@
127127
handleAuthorizedState();
128128
})
129129
.catch(function (rejectedPermission) {
130-
return handleUnauthorizedState(permissionMap, rejectedPermission);
130+
handleUnauthorizedState(permissionMap, rejectedPermission);
131131
})
132132
.finally(function () {
133133
setStateAuthorizationStatus(false);
@@ -156,14 +156,13 @@
156156
* @method
157157
* @private
158158
*
159-
* @param permissionMap {PermissionMapFactory} Map of access rights names
159+
* @param permissionMap {permission.PermissionMap} Map of access rights names
160160
* @param rejectedPermission {String} Rejected access right
161-
* @returns {*}
162161
*/
163162
function handleUnauthorizedState(permissionMap, rejectedPermission) {
164163
$rootScope.$broadcast('$stateChangePermissionDenied', toState, toParams, options);
165164

166-
return permissionMap
165+
permissionMap
167166
.resolveRedirectState(rejectedPermission)
168167
.then(function (redirect) {
169168
$state.go(redirect.state, redirect.params, redirect.options);

src/models/PermissionMap.js

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,12 @@
4444
* @param permissionMap {permission.PermissionMap} Compensated permission map
4545
*/
4646
PermissionMap.prototype.extendPermissionMap = function (permissionMap) {
47-
this.only = this.only.concat(permissionMap.only);
48-
this.except = this.except.concat(permissionMap.except);
47+
if (permissionMap.only.length) {
48+
this.only = this.only.concat([permissionMap.only]);
49+
}
50+
if (permissionMap.except.length) {
51+
this.except = this.except.concat([permissionMap.except]);
52+
}
4953
};
5054

5155
/**
@@ -151,20 +155,15 @@
151155
*/
152156
function resolvePermissionMapProperty(property, toState, toParams, options) {
153157
if (angular.isString(property)) {
154-
return [[property]];
158+
return [property];
155159
}
156160

157161
if (angular.isArray(property)) {
158-
// @todo: Naive checking if provided array is already compensated one
159-
if (angular.isArray(property[0])) {
160-
return property;
161-
}
162-
163-
return [property];
162+
return property;
164163
}
165164

166165
if (angular.isFunction(property)) {
167-
return [property.call(null, toState, toParams, options)];
166+
return property.call(null, toState, toParams, options);
168167
}
169168

170169
return [];

0 commit comments

Comments
 (0)