@soldair/seneca-perm
Version:
test - Seneca permissions plugin
255 lines (168 loc) • 5.28 kB
JavaScript
/* Copyright (c) 2013-2014 Richard Rodger */
;
// mocha perm.test.js
var seneca = require('seneca')
var assert = require('chai').assert
var gex = require('gex')
var async = require('async')
describe('perm', function() {
it('allow', function(fin){
var si = seneca()
si.add({a:1,b:2},function(args,done){done(null,''+args.a+args.b+args.c)})
si.use( '..', {act:[
{a:1,b:2},
{a:1,b:2,d:4}
]})
si.ready(function(){
;si.act('a:1,b:2,c:3',function(err,out){
assert.ok( null == err )
assert.equal('123',out)
;si.act('a:1,b:2,c:3',{perm$:{allow:true}},function(err,out){
assert.ok( null == err )
assert.equal('123',out)
;si.act('a:1,b:2,c:3',{perm$:{allow:false}},function(err,out){
assert.isNotNull(err)
assert.equal('perm/fail/allow',err.seneca.code)
;si.act('a:1,b:2,c:3,d:4',function(err,out){
assert.ok( null == err )
assert.equal('123',out)
;si.act('a:1,b:2,c:3,d:4',{perm$:{allow:true}},function(err,out){
assert.ok( null == err )
assert.equal('123',out)
;si.act('a:1,b:2,c:3,d:4',{perm$:{allow:false}},function(err,out){
assert.isNotNull(err)
assert.equal('perm/fail/allow',err.seneca.code)
;var act = si.util.router()
;act.add( {a:1,b:2}, true )
;si.act('a:1,b:2,c:3',{perm$:{act:act}},function(err,out){
assert.ok( null == err )
assert.equal('123',out)
fin();
}) }) }) }) }) }) })
})
})
it('entity', function(fin){
var si = seneca()
si.use( '..', {
entity:[
{name:'foo'},
'bar'
]
})
si.ready(function(){
var entity = si.util.router()
entity.add({name:'foo'},'cr')
entity.add({name:'bar'},'rq')
var b1 = si.make('bar',{b:2}).save$()
var psi = si.delegate({perm$:{entity:entity}})
var pf1 = psi.make('foo',{a:1})
var pb1 = psi.make('bar')
;pf1.save$(function(err,pf1){
assert.ok( null == err )
assert.isNotNull(pf1.id)
assert.equal(1,pf1.a)
;pf1.load$(pf1.id,function(err,pf1){
assert.ok( null == err )
assert.isNotNull(pf1.id)
assert.equal(1,pf1.a)
pf1.a=2
;pf1.save$(function(err,pf1){
assert.isNotNull(err)
assert.equal('cr',err.seneca.valmap.allowed)
assert.equal('u',err.seneca.valmap.need)
;pb1.list$({b:2},function(err,list){
assert.ok( null == err )
assert.equal(2,list[0].b)
fin();
}) }) }) })
})
})
// TODO: test all ent cmds
it('entity-boolean', function(fin){
var si = seneca()
si.use( '..', {
// apply perm check to all entities
entity:true
})
si.ready(function(){
var entity = si.util.router()
entity.add({name:'bar'},'rq')
var f1 = si.make('foo',{a:1}).save$()
var b1 = si.make('bar',{b:2}).save$()
var psi = si.delegate({perm$:{entity:entity}})
var pf1 = psi.make('foo')
var pb1 = psi.make('bar')
;pf1.list$({a:1},function(err,list){
assert.isNotNull(err)
assert.equal(null,err.seneca.valmap.allowed)
assert.equal('q',err.seneca.valmap.need)
;pb1.list$({b:2},function(err,list){
assert.ok( null == err )
assert.equal(2,list[0].b)
fin();
}) })
})
})
it('owner', function(fin){
var si = seneca()
si.use( '..', {
own:[
{name:'foo'}
]
})
si.ready(function(){
var entity = si.util.router()
entity.add({name:'foo'},'crudq')
var os1 = si.delegate({perm$:{own:{entity:entity,owner:'o1'}}})
var f1 = os1.make('foo')
f1.a=1
f1.save$(function(err,f1){
assert.ok( null == err )
assert.equal(1,f1.a)
assert.equal('o1',f1.owner)
f1.load$(f1.id,function(err,f1){
assert.ok( null == err )
assert.isNotNull(f1.id)
assert.equal(1,f1.a)
assert.equal('o1',f1.owner)
var os2 = si.delegate({perm$:{own:{entity:entity,owner:'o2'}}})
var f2 = os2.make('foo')
f2.load$(f1.id,function(err,f2o){
assert.isNotNull(err)
assert.equal('perm/fail/own',err.seneca.code)
assert.equal('o2',err.seneca.valmap.owner)
//console.log(err)
fin();
})
})
})
})
})
it('makeperm',function(fin){
var si = seneca()
si.use( '..', {
act:[
{a:1},
{b:2},
]
})
si.add({a:1},function(args,done){done(null,''+args.a+args.c)})
si.add({b:2},function(args,done){done(null,''+args.b+args.c)})
si.ready(function(){
si.act('role:perm,cmd:makeperm',{perm:{act:[
{a:1,perm$:true}
]}}, function(err,perm){
assert.ok( null == err )
si.act('a:1,c:3',{perm$:perm},function(err,out){
assert.ok( null == err )
assert.equal('13',out)
si.act('b:2,c:3',{perm$:perm},function(err,out){
assert.isNotNull(err)
assert.equal('perm/fail/act',err.seneca.code)
fin()
})
})
})
})
})
})