| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-07-11 18:39:48 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-07-11 18:39:48 +0200 | 
| commit | b6e8cc8606b288970d7cdf577c6dd36950adac91 (patch) | |
| tree | c8388d48e7d3fb8c8622181e4f0a4376477278b4 /src/db | |
| parent | acb9dd3220a3edcac93aa11d1d74d008e2fb23ed (diff) | |
Separates read and write permissions.
Diffstat (limited to 'src/db')
| -rw-r--r-- | src/db/logic/db_access.erl | 62 | 
1 files changed, 32 insertions, 30 deletions
| diff --git a/src/db/logic/db_access.erl b/src/db/logic/db_access.erl index f7393f0..1591ead 100644 --- a/src/db/logic/db_access.erl +++ b/src/db/logic/db_access.erl @@ -10,36 +10,14 @@  -export  (     [ -      read/2, -      insert/4, +      read/3, +      insert/5,        query/1     ]  ).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec get_value (list(shr_db_item:type())) -> ({'ok', any()} | 'not_found'). -get_value ([]) -> not_found; -get_value ([Regval]) -> {ok, shr_db_item:get_value(Regval)}. - --spec read_transaction (atom(), any()) -> ({'ok', any()} | 'not_found'). -read_transaction (DB, ID) -> -   get_value(mnesia:read(DB, ID)). - --spec insert_transaction -   ( -      atom(), -      any(), -      shr_db_user:permission(), -      any() -   ) -   -> 'ok'. -insert_transaction (DB, ID, Perm, Value) -> -   StoredItem = shr_db_item:new(ID, Perm, Value), -   % FIXME: handle return value, mnesia:write -> (transaction abort | ok). -   % FIXME: is this an atomic OP? Is the lock freed afterwards? -   mnesia:write(DB, StoredItem, sticky_write), -   ok.  -spec query_transaction (shr_db_query:type()) -> 'ok'.  query_transaction (Query) -> @@ -55,15 +33,39 @@ query_transaction (Query) ->  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec read (atom(), any()) +-spec read +   ( +      atom(), +      any(), +      shr_db_user:user() +   )     -> ({'aborted', any()} | {'atomic', ({'ok', any()} | 'not_found')}). -read (DB, ID) -> -   mnesia:transaction(fun read_transaction/2, [DB, ID]). +read (DB, ID, Cred) -> +   case mnesia:transaction(fun mnesia:read/2, [DB, ID]) of +      {'atomic', []} -> {'atomic', 'not_found'}; +      {'atomic', [Item]} -> +         true = +            shr_db_user:can_access +            ( +               shr_db_item:get_write_permission(Item), +               Cred +            ), +         {'atomic', {ok, shr_db_item:get_value(Item)}}; + +      Other -> {'aborted', Other} +   end. --spec insert (atom(), any(), shr_db_user:permission(), any()) +-spec insert +   ( +      atom(), +      any(), +      shr_db_user:permission(), +      shr_db_user:permission(), +      any())     -> ({'aborted', any()} | {'atomic', 'ok'}). -insert (DB, ID, Perm, Value) -> -   mnesia:transaction(fun insert_transaction/4, [DB, ID, Perm, Value]). +insert (DB, ID, ReadPerm, WritePerm, Value) -> +   Item = shr_db_item:new(ID, ReadPerm, WritePerm, Value), +   mnesia:transaction(fun mnesia:write/3, [DB, Item, sticky_write]).  -spec query (shr_db_query:type()) -> ({'aborted', any()} | {'atomic', 'ok'}).  query (Query) -> | 


