Packages
kvs
2.1.0
13.5.22-aleph
13.4.16
13.4.15
13.4.14
13.4.13
13.3.1
13.2.28
11.9.1
10.8.3
10.8.2
10.3.0
9.9.2
9.9.1
9.9.0
9.8.0
9.7.0
9.4.8
9.4.7
9.4.6
9.4.5
9.4.4
9.4.3
9.4.2
9.4.1
9.4.0
8.12.0
8.11.2
8.11.1
8.10.4
8.10.3
8.10.2
8.10.1
8.10.0
8.5.2
8.5.1
8.5.0
8.4.1
8.4.0
8.3.1
8.3.0
7.11.5
7.9.1
7.7.0
7.1.3
7.1.2
7.1.1
6.12.11
6.12.10
6.12.9
6.12.8
6.12.7
6.12.6
6.12.5
6.12.4
6.12.3
6.12.2
6.12.1
6.12.0
6.11.2
6.11.1
6.11.0
6.10.2
6.10.1
6.10.0
6.9.2
6.9.1
6.9.0
6.7.7
6.7.6
6.7.5
6.7.4
6.7.3
6.7.2
6.7.1
6.7.0
6.6.0
2.1.0
0.12.1
retired
KVS Key-Value Store Abstraction Layer
Current section
Files
Jump to
Current section
Files
src/kvs_acl.erl
-module(kvs_acl).
-copyright('Synrc Research Center s.r.o.').
-compile(export_all).
-include("kvs.hrl").
-include("metainfo.hrl").
-include("acl.hrl").
-include("user.hrl").
-include("group.hrl").
-include("feed.hrl").
metainfo() ->
#schema{name=kvs,tables=[
#table{name=acl,container=true,fields=record_info(fields,acl),keys=[id,accessor]},
#table{name=access,container=acl,fields=record_info(fields,access)}
]}.
define_access(Accessor, Resource, Action) ->
Entry = #access{ id={Accessor, Resource}, accessor=Accessor, action=Action},
case kvs:add(Entry) of
{error, exist} -> kvs:put(Entry#access{action=Action});
{error, no_container} -> skip;
{ok, E} -> E end.
check(Keys) ->
Acls = [Acl || {ok, Acl = #access{}} <- [kvs:get(access, Key) || Key <- Keys]],
case Acls of
[] -> none;
[#access{action = Action} | _] -> Action end.
check_access(#user{id = Id}, Feature) ->
Query = [ {{user,Id},Feature} ],
check(Query);
check_access(Id, Feature) ->
case kvs:get(user, Id) of
{ok, User} -> check_access(User, Feature);
E -> E end.