| summaryrefslogtreecommitdiff |
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2019-01-04 19:07:34 +0100 |
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2019-01-04 19:07:34 +0100 |
| commit | 76256398ba61e47f71098b1aa6ea511473b93e44 (patch) | |
| tree | 4fbb34d2665cd08e7629f5727e53b2b2211bc468 /src | |
| parent | 3f15009661717ac99149656ac93308a29494b983 (diff) | |
...
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 ( |


