| summaryrefslogtreecommitdiff | 
diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ataxia_client.erl | 34 | ||||
| -rw-r--r-- | src/ataxia_security.erl | 6 | ||||
| -rw-r--r-- | src/ataxia_server.erl | 35 | 
3 files changed, 65 insertions, 10 deletions
| diff --git a/src/ataxia_client.erl b/src/ataxia_client.erl index dec16e6..739320a 100644 --- a/src/ataxia_client.erl +++ b/src/ataxia_client.erl @@ -12,7 +12,8 @@     [        add/4,        add_at/5, -      reserve/2, +      reserve/3, +      reserve/4,        fetch/3,        update/4, @@ -102,18 +103,41 @@ add (DB, ReadPerm, WritePerm, Value) ->  -spec reserve     (        atom(), +      ataxia_security:permission(), +      ataxia_security:permission() +   ) +   -> ({'ok', ataxia_id:type()} | {'aborted', any()}). +reserve (DB, ReadPerm, WritePerm) -> +   DBNode = get_random_db_node(), + +   Reply = rpc:call(DBNode, ataxia_server, reserve, [DB, ReadPerm, WritePerm]), + +   io:format +   ( +      "~nataxia_client:reserve(~p) ! ~p -> ~p.~n", +      [{DB, ReadPerm, WritePerm}, DBNode, Reply] +   ), + +   Reply. + +-spec reserve +   ( +      atom(), +      ataxia_security:permission(), +      ataxia_security:permission(),        ataxia_id:type()     ) -   -> ('ok' | 'unavailable'). -reserve (DB, ID) -> +   -> ('ok' |  {'aborted', any()}). +reserve (DB, ReadPerm, WritePerm, ID) ->     DBNode = get_db_node_for(ID), -   Reply = rpc:call(DBNode, ataxia_server, reserve, [DB, ID]), +   Reply = +      rpc:call(DBNode, ataxia_server, reserve, [DB, ReadPerm, WritePerm, ID]),     io:format     (        "~nataxia_client:reserve(~p) ! ~p -> ~p.~n", -      [{DB, ID}, DBNode, Reply] +      [{DB, ReadPerm, WritePerm, ID}, DBNode, Reply]     ),     Reply. diff --git a/src/ataxia_security.erl b/src/ataxia_security.erl index 27f0540..e51ab3c 100644 --- a/src/ataxia_security.erl +++ b/src/ataxia_security.erl @@ -14,7 +14,7 @@  -export([janitor/0, any/0, admin/0, user_from_id/1]). --export([add_access/2, remove_access/2, allow_only/1]). +-export([add_access/2, remove_access/2, allow_only/1, allow_any/0]).  -export([can_access/2]).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -36,6 +36,10 @@ remove_access (User, Permission) ->  allow_only (User) ->     ordsets:add_element(User, ordsets:new()). +-spec allow_any () -> permission(). +allow_any () -> +   ordsets:add_element(any(), ordsets:new()). +  -spec user_from_id (any()) -> user().  user_from_id (ID) -> {user, ID}. diff --git a/src/ataxia_server.erl b/src/ataxia_server.erl index 8a49616..dfa2f9e 100644 --- a/src/ataxia_server.erl +++ b/src/ataxia_server.erl @@ -12,7 +12,8 @@     [        add_at/5,        add/4, -      reserve/2, +      reserve/3, +      reserve/4,        fetch/3,        update/4, @@ -104,12 +105,38 @@ add (DB, ReadPerm, WritePerm, Value) ->  -spec reserve     (        atom(), +      ataxia_security:permission(), +      ataxia_security:permission(),        ataxia_id:type()     )     -> ({'aborted', any()} | 'ok'). -reserve (DB, ID) -> -   JanitorPermission = ataxia_security:allow_only(ataxia_security:janitor()), -   add_at(DB, ID, JanitorPermission, JanitorPermission, reserved). +reserve (DB, ReadPerm, WritePerm, ID) -> +   % TODO: spawn or inform janitor +   add_at +   ( +      DB, +      ID, +      ataxia_security:add_access(ataxia_security:janitor(), ReadPerm), +      ataxia_security:add_access(ataxia_security:janitor(), WritePerm), +      reserved +   ). + +-spec reserve +   ( +      atom(), +      ataxia_security:permission(), +      ataxia_security:permission() +   ) +   -> ({'aborted', any()} | {'ok', ataxia_id:type()}). +reserve (DB, ReadPerm, WritePerm) -> +   % TODO: spawn or inform janitor +   add +   ( +      DB, +      ataxia_security:add_access(ataxia_security:janitor(), ReadPerm), +      ataxia_security:add_access(ataxia_security:janitor(), WritePerm), +      reserved +   ).  -spec fetch     ( | 


