summaryrefslogtreecommitdiff
path: root/src/db
diff options
context:
space:
mode:
Diffstat (limited to 'src/db')
-rw-r--r--src/db/include/db_item.hrl15
-rw-r--r--src/db/include/db_query.hrl10
-rw-r--r--src/db/include/db_user.hrl7
-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.erl64
-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.erl28
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).