Skip to content

Commit 1d11c66

Browse files
committed
Now in assertion we can get instance of UserIdentity
1 parent c1cd815 commit 1d11c66

File tree

3 files changed

+44
-10
lines changed

3 files changed

+44
-10
lines changed

dist/acl.js

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ angular.module('stylet.acl', []);
3131
* privileges, respectively.
3232
*
3333
* @callback AclAssertion
34-
* @param {Object|string} role
35-
* @param {Object|string} resource
34+
* @param {AclRoleInterface|string} role
35+
* @param {AclResourceInterface|string} resource
3636
* @param {string} privilege
3737
*/
3838

@@ -71,6 +71,7 @@ angular.module('stylet.acl').service('AclService', ["AclRegistryService", functi
7171
byResourceId: {}
7272
};
7373
var _isAllowedResource = null;
74+
var _isAllowedRole = null;
7475

7576
/**
7677
* @returns {{AclRoleInterface|null}}
@@ -111,7 +112,7 @@ angular.module('stylet.acl').service('AclService', ["AclRegistryService", functi
111112
* @param {string} [privilege=null] privilege
112113
* @returns {boolean}
113114
*/
114-
this.can = function (resource /*null*/, privilege /*null*/) {
115+
this.can = function (resource, privilege) {
115116
resource = typeof resource === 'undefined' ? null : resource;
116117
privilege = typeof privilege === 'undefined' ? null : privilege;
117118

@@ -227,9 +228,11 @@ angular.module('stylet.acl').service('AclService', ["AclRegistryService", functi
227228
var result, ruleTypeAllPrivileges;
228229

229230
// reset role & resource to null
231+
_isAllowedRole = null;
230232
_isAllowedResource = null;
231233

232234
if (role !== null) {
235+
_isAllowedRole = role;
233236
role = self.getRole(role);
234237
}
235238
if (resource !== null) {
@@ -249,8 +252,6 @@ angular.module('stylet.acl').service('AclService', ["AclRegistryService", functi
249252
var rules;
250253
if ((rules = getRules(resource, null)) !== null) {
251254
for (privilege in rules.byPrivilegeId) {
252-
var rule = rules.byPrivilegeId[privilege];
253-
254255
if (self.TYPE_DENY === getRuleType(resource, null, privilege)) {
255256
return false;
256257
}
@@ -959,7 +960,7 @@ angular.module('stylet.acl').service('AclService', ["AclRegistryService", functi
959960
var assertion = rule.assert;
960961
assertionValue = assertion.call(
961962
self,
962-
role,
963+
_isAllowedRole === self.USER_IDENTITY_ROLE && self.getUserIdentity() !== null ? self.getUserIdentity() : role,
963964
_isAllowedResource !== null ? _isAllowedResource : resource,
964965
privilege
965966
);

src/acl-service.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@
3030
* privileges, respectively.
3131
*
3232
* @callback AclAssertion
33-
* @param {Object|string} role
34-
* @param {Object|string} resource
33+
* @param {AclRoleInterface|string} role
34+
* @param {AclResourceInterface|string} resource
3535
* @param {string} privilege
3636
*/
3737

@@ -70,6 +70,7 @@ angular.module('stylet.acl').service('AclService', function (AclRegistryService)
7070
byResourceId: {}
7171
};
7272
var _isAllowedResource = null;
73+
var _isAllowedRole = null;
7374

7475
/**
7576
* @returns {{AclRoleInterface|null}}
@@ -110,7 +111,7 @@ angular.module('stylet.acl').service('AclService', function (AclRegistryService)
110111
* @param {string} [privilege=null] privilege
111112
* @returns {boolean}
112113
*/
113-
this.can = function (resource /*null*/, privilege /*null*/) {
114+
this.can = function (resource, privilege) {
114115
resource = typeof resource === 'undefined' ? null : resource;
115116
privilege = typeof privilege === 'undefined' ? null : privilege;
116117

@@ -226,9 +227,11 @@ angular.module('stylet.acl').service('AclService', function (AclRegistryService)
226227
var result, ruleTypeAllPrivileges;
227228

228229
// reset role & resource to null
230+
_isAllowedRole = null;
229231
_isAllowedResource = null;
230232

231233
if (role !== null) {
234+
_isAllowedRole = role;
232235
role = self.getRole(role);
233236
}
234237
if (resource !== null) {
@@ -956,7 +959,7 @@ angular.module('stylet.acl').service('AclService', function (AclRegistryService)
956959
var assertion = rule.assert;
957960
assertionValue = assertion.call(
958961
self,
959-
role,
962+
_isAllowedRole === self.USER_IDENTITY_ROLE && self.getUserIdentity() !== null ? self.getUserIdentity() : role,
960963
_isAllowedResource !== null ? _isAllowedResource : resource,
961964
privilege
962965
);

test/acl-service.js

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,36 @@ describe('ncAclService', function () {
127127

128128
});
129129

130+
describe('can()', function () {
131+
132+
it('should work with user with multiple roles', function () {
133+
AclService.addRole('User');
134+
AclService.addRole('Manager');
135+
AclService.addResource('Posts');
136+
AclService.allow('Manager', 'Posts');
137+
138+
userIdentityStub.roles = ['User', 'Manager'];
139+
AclService.setUserIdentity(userIdentityStub);
140+
141+
expect(AclService.can('Posts')).toBeTruthy();
142+
});
143+
144+
it('should work with assertions', function () {
145+
AclService.addRole('User');
146+
AclService.addResource('Posts');
147+
AclService.allow('User', 'Posts', null, function (role, resource, privilege) {
148+
return role.name === 'Dezmond' && resource === 'Posts';
149+
});
150+
151+
userIdentityStub.roles = ['User'];
152+
userIdentityStub.name = 'Dezmond';
153+
AclService.setUserIdentity(userIdentityStub);
154+
155+
expect(AclService.can('Posts')).toBeTruthy();
156+
});
157+
158+
});
159+
130160
describe('isAllowed()', function () {
131161

132162
it('should work with role & resource inheritance', function () {

0 commit comments

Comments
 (0)