loopback/test/acl.test.js

103 lines
3.6 KiB
JavaScript
Raw Normal View History

2013-11-10 06:22:16 +00:00
var assert = require('assert');
var loopback = require('../index');
var acl = require('../lib/models/acl');
2013-11-12 06:16:51 +00:00
var Scope = acl.Scope;
var ACL = acl.ACL;
var ScopeACL = acl.ScopeACL;
2013-11-10 06:22:16 +00:00
var User = loopback.User;
2013-11-12 18:10:32 +00:00
function checkResult(err, result) {
// console.log(err, result);
assert(!err);
}
2013-11-10 06:22:16 +00:00
describe('security scopes', function () {
2013-11-12 06:16:51 +00:00
it("should allow access to models for the given scope by wildcard", function () {
2013-11-10 06:22:16 +00:00
var ds = loopback.createDataSource({connector: loopback.Memory});
2013-11-12 06:16:51 +00:00
Scope.attachTo(ds);
2013-11-13 18:02:59 +00:00
ACL.attachTo(ds);
2013-11-10 06:22:16 +00:00
2013-11-12 06:16:51 +00:00
// console.log(Scope.relations);
2013-11-10 06:22:16 +00:00
2013-11-12 06:16:51 +00:00
Scope.create({name: 'user', description: 'access user information'}, function (err, scope) {
// console.log(scope);
2013-11-13 18:02:59 +00:00
ACL.create({principalType: ACL.SCOPE, principalId: scope.id, model: 'user', property: ACL.ALL,
accessType: ACL.ALL, permission: ACL.ALLOW},
2013-11-12 18:10:32 +00:00
function (err, resource) {
2013-11-12 06:16:51 +00:00
// console.log(resource);
2013-11-12 18:10:32 +00:00
Scope.checkPermission('user', 'user', ACL.ALL, ACL.ALL, checkResult);
Scope.checkPermission('user', 'user', 'name', ACL.ALL, checkResult);
Scope.checkPermission('user', 'user', 'name', ACL.READ, checkResult);
2013-11-10 06:22:16 +00:00
});
});
});
2013-11-12 06:16:51 +00:00
it("should allow access to models for the given scope", function () {
var ds = loopback.createDataSource({connector: loopback.Memory});
Scope.attachTo(ds);
2013-11-13 18:02:59 +00:00
ACL.attachTo(ds);
2013-11-12 06:16:51 +00:00
// console.log(Scope.relations);
Scope.create({name: 'user', description: 'access user information'}, function (err, scope) {
// console.log(scope);
2013-11-13 18:02:59 +00:00
ACL.create({principalType: ACL.SCOPE, principalId: scope.id,
model: 'user', property: 'name', accessType: ACL.READ, permission: ACL.ALLOW},
2013-11-12 18:10:32 +00:00
function (err, resource) {
2013-11-14 01:07:43 +00:00
ACL.create({principalType: ACL.SCOPE, principalId: scope.id,
model: 'user', property: 'name', accessType: ACL.WRITE, permission: ACL.DENY},
function (err, resource) {
// console.log(resource);
Scope.checkPermission('user', 'user', ACL.ALL, ACL.ALL, function (err, perm) {
2013-11-14 01:24:42 +00:00
assert(perm.permission === ACL.DENY); // because name.WRITE == DENY
2013-11-14 01:07:43 +00:00
});
Scope.checkPermission('user', 'user', 'name', ACL.ALL, function (err, perm) {
2013-11-14 01:24:42 +00:00
assert(perm.permission === ACL.DENY); // because name.WRITE == DENY
2013-11-14 01:07:43 +00:00
});
Scope.checkPermission('user', 'user', 'name', ACL.READ, function (err, perm) {
assert(perm.permission === ACL.ALLOW);
});
Scope.checkPermission('user', 'user', 'name', ACL.WRITE, function (err, perm) {
assert(perm.permission === ACL.DENY);
});
});
});
2013-11-12 06:16:51 +00:00
});
});
});
describe('security ACLs', function () {
it("should allow access to models for the given principal by wildcard", function () {
var ds = loopback.createDataSource({connector: loopback.Memory});
ACL.attachTo(ds);
2013-11-12 18:10:32 +00:00
ACL.create({principalType: 'user', principalId: 'u001', model: 'user', property: ACL.ALL,
accessType: ACL.ALL, permission: ACL.ALLOW}, function (err, acl) {
2013-11-12 06:16:51 +00:00
2013-11-14 01:24:42 +00:00
ACL.create({principalType: 'user', principalId: 'u001', model: 'user', property: ACL.ALL,
accessType: ACL.READ, permission: ACL.DENY}, function (err, acl) {
ACL.checkPermission('user', 'u001', 'user', 'name', ACL.READ, function (err, perm) {
assert(perm.permission === ACL.DENY);
});
ACL.checkPermission('user', 'u001', 'user', 'name', ACL.ALL, function (err, perm) {
assert(perm.permission === ACL.DENY);
});
});
2013-11-12 06:16:51 +00:00
});
});
2013-11-10 06:22:16 +00:00
});