Current section

Files

Jump to
kvs src kvs_acl.erl
Raw

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.