UNPKG

1.74 kBJavaScriptView Raw
1'use strict';
2
3var util = require('util')
4
5var permissions = {}
6
7var getDirectChildren = function (parent) {
8
9 var perm = permissions[parent]
10
11 if (typeof perm === 'undefined' || perm === null) perm = []
12
13 if (!util.isArray(perm)) perm = [perm]
14
15 return perm
16}
17
18var getUserPermissions = function (userid) {
19
20 return getDirectChildren(userid)
21
22}
23
24var getDirectPermissionChildren = function (parentPermission) {
25
26 return getDirectChildren(parentPermission)
27
28}
29
30var getAllChildren = function (parentPermission) {
31
32 var directChildren = getDirectPermissionChildren(parentPermission)
33
34 if (directChildren.length === 0) return []
35
36 var childrensChildren = directChildren.reduce(
37 function (prevDirectChild, currDirectChild) {
38 return prevDirectChild.concat(getAllChildren(currDirectChild))
39 },
40 []
41 )
42
43 return directChildren.concat(childrensChildren)
44
45}
46
47var checkIsParent = function (parentPermission, childPermission) {
48
49 if (parentPermission === childPermission)
50 return false
51
52 var children = getAllChildren(parentPermission)
53
54 for (var i = 0; i < children.length; i++) {
55 if (children[i] === childPermission)
56 return true
57 }
58
59 return false
60}
61
62var checkAccess = function (userid, permission) {
63
64 var userPermissions = getUserPermissions(userid)
65
66 for (var i = 0; i < userPermissions.length; i++) {
67
68 if (userPermissions[i] === permission)
69 return true
70
71 if (checkIsParent(userPermissions[i], permission))
72 return true
73 }
74
75 return false
76}
77
78var admittance = function (userid) {
79 return {
80 is: function (permission) {
81 return checkAccess(userid, permission)
82 }
83 }
84}
85
86admittance.load = function (permissionData) {
87 permissions = permissionData
88}
89
90module.exports = admittance