| summaryrefslogtreecommitdiff | 
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2018-06-04 17:39:23 +0200 | 
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2018-06-04 17:39:23 +0200 | 
| commit | 25b3f31c8a451044459d104a3a36f919557b8d20 (patch) | |
| tree | 43e1a9a19cc6cd479de604ff45a93f8982c75cc3 /src/db | |
| parent | 4aa208ada20eaa3795740424d3519083fef1df65 (diff) | |
Analysis of 'db' -> crash. Always a good sign...
Diffstat (limited to 'src/db')
| -rw-r--r-- | src/db/include/db_item.hrl | 15 | ||||
| -rw-r--r-- | src/db/include/db_query.hrl | 10 | ||||
| -rw-r--r-- | src/db/include/db_user.hrl | 7 | ||||
| -rw-r--r-- | src/db/src/logic/storage_access.erl (renamed from src/db/src/storage_access.erl) | 0 | ||||
| -rw-r--r-- | src/db/src/struct/db_item.erl | 64 | ||||
| -rw-r--r-- | src/db/src/struct/db_query.erl (renamed from src/db/src/storage_query.erl) | 14 | ||||
| -rw-r--r-- | src/db/src/struct/db_user.erl | 28 | 
7 files changed, 125 insertions, 13 deletions
| diff --git a/src/db/include/db_item.hrl b/src/db/include/db_item.hrl new file mode 100644 index 0000000..86d5863 --- /dev/null +++ b/src/db/include/db_item.hrl @@ -0,0 +1,15 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-record +( +   db_item, +   { +      id :: any(), +      perm :: db_user:permission(), +      val :: any() +   } +). + +-type db_item() :: #db_item{}. + diff --git a/src/db/include/db_query.hrl b/src/db/include/db_query.hrl index 45c040b..ac7745a 100644 --- a/src/db/include/db_query.hrl +++ b/src/db/include/db_query.hrl @@ -1,8 +1,6 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --type db_user() :: ({'user', any()} | 'admin' | 'any'). -  -record  (     set_field, @@ -34,9 +32,9 @@  -record  ( -   set_user, +   set_perm,     { -      user :: db_user() +      perm :: db_user:permission()     }  ). @@ -46,12 +44,12 @@     {        db :: atom(),        id :: any(), -      user :: db_user(), +      user :: db_user:user(),        ops :: list(db_query_master_op())     }  ).  -type db_query_op() :: (#set_field{} | #add_to_field{} | #update_indexed{}). --type db_query_master_op() :: (db_query_op() | #set_user{}). +-type db_query_master_op() :: (db_query_op() | #set_perm{}).  -type db_query() :: #db_query{}. diff --git a/src/db/include/db_user.hrl b/src/db/include/db_user.hrl new file mode 100644 index 0000000..c5b033e --- /dev/null +++ b/src/db/include/db_user.hrl @@ -0,0 +1,7 @@ +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type db_named_user() :: {'user', any()}. +-type db_user() :: (db_named_user() | 'admin' | 'any'). +-type db_permission() :: (list(db_named_user()) | 'any'). + diff --git a/src/db/src/storage_access.erl b/src/db/src/logic/storage_access.erl index c58f26d..c58f26d 100644 --- a/src/db/src/storage_access.erl +++ b/src/db/src/logic/storage_access.erl diff --git a/src/db/src/struct/db_item.erl b/src/db/src/struct/db_item.erl new file mode 100644 index 0000000..6ec79d0 --- /dev/null +++ b/src/db/src/struct/db_item.erl @@ -0,0 +1,64 @@ +-module(db_item). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("../../include/db_item.hrl"). + +-type type() :: db_item(). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([type/0]). + +-export +( +   [ +      new/3, + +      get_id/1, +      get_permission/1, +      get_value/1, + +      set_permission/2, +      set_value/2, + +      get_id_field/0 +   ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec new (any(), db_user:permission(), any()) -> type(). +new (ID, Permission, Value) -> +   #db_item +   { +      id = ID, +      perm = Permission, +      val = Value +   }. + +-spec get_id (type()) -> any(). +get_id (#db_item { id = Result }) -> Result. + +-spec get_permission (type()) -> db_user:permission(). +get_permission (#db_item { perm = Result }) -> Result. + +-spec get_value (type()) -> any(). +get_value (#db_item { val = Result }) -> Result. + +-spec set_permission (db_user:permission(), type()) -> type(). +set_permission (Perm, Item) -> Item#db_item{ perm = Perm }. + +-spec set_value (any(), type()) -> type(). +set_value (Value, Item) -> Item#db_item{ val = Value }. + +-spec get_id_field () -> non_neg_integer(). +get_id_field () -> #db_item.id. + diff --git a/src/db/src/storage_query.erl b/src/db/src/struct/db_query.erl index 5b37f2d..18d0a12 100644 --- a/src/db/src/storage_query.erl +++ b/src/db/src/struct/db_query.erl @@ -1,9 +1,9 @@ --module(storage_query). +-module(db_query).  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --include("../include/db_query.hrl"). +-include("../../include/db_query.hrl").  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -13,7 +13,7 @@  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% --spec get_user (db_query()) -> db_user(). +-spec get_user (db_query()) -> db_user:user().  get_user (#db_query{ user = Result }) -> Result.  -spec apply_update_indexed (#update_indexed{}, any()) -> any(). @@ -65,10 +65,10 @@ apply_op_to (Op, Elem) when is_record(Elem, update_indexed) ->        db_item:type()     )     -> db_item:type(). -apply_master_op_to (MOp, Elem) when is_record(MOp, set_user) -> -   NewUser = MOp#set_user.user, +apply_master_op_to (MOp, Elem) when is_record(MOp, set_perm) -> +   NewPerm = MOp#set_perm.perm, -   db_item:set_user(NewUser, Elem); +   db_item:set_perm(NewPerm, Elem);  apply_master_op_to (MOp, Elem) ->     OldValue = db_item:get_value(Elem),     NewValue = apply_op_to(MOp, OldValue), @@ -85,6 +85,6 @@ apply_master_op_to (MOp, Elem) ->     )     -> ({'ok', db_item:type()} | 'error').  apply_to (DBQuery, DBItem) -> -   true = db_user:has_permission(db_item:get_user(DBItem), get_user(DBQuery)), +   true = db_user:can_access(db_item:get_permission(DBItem), get_user(DBQuery)),     {ok, apply_master_op_to(DBQuery, DBItem)}. diff --git a/src/db/src/struct/db_user.erl b/src/db/src/struct/db_user.erl new file mode 100644 index 0000000..983013c --- /dev/null +++ b/src/db/src/struct/db_user.erl @@ -0,0 +1,28 @@ +-module(db_user). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include("../../include/db_user.hrl"). + +-type user() :: db_user(). +-type permission() :: db_permission(). +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export_type([user/0, permission/0]). + +-export([can_access/2]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec can_access (permission(), user()) -> boolean(). +can_access (_, admin) -> true; +can_access (any, _) -> true; +can_access (List, {'user', User}) -> +   lists:member(User, List). | 


