From c98487318a59b38d4aa86913dc3d790f6dc804ef Mon Sep 17 00:00:00 2001 From: nek0 Date: Sat, 16 May 2020 10:02:26 +0200 Subject: [PATCH] prepare roles --- app/Main.hs | 2 + mateamt.cabal | 1 + src/Model.hs | 1 + src/Model/Role.hs | 97 +++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 101 insertions(+) diff --git a/app/Main.hs b/app/Main.hs index 7462a4b..0147bca 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -89,6 +89,8 @@ main = do void $ execute_ conn initAuthData void $ execute_ conn initAmount void $ execute_ conn initJournal + void $ execute_ conn initRole + void $ execute_ conn initUserToRole forkCleanProcess conn store withStdoutLogger $ \ilog -> do let settings = setPort (fromIntegral lport) $ diff --git a/mateamt.cabal b/mateamt.cabal index 33fc215..4571ac4 100644 --- a/mateamt.cabal +++ b/mateamt.cabal @@ -69,6 +69,7 @@ library , Model.Amount , Model.Journal , Model.Avatar + , Model.Role , Types , Types.Auth , Types.Product diff --git a/src/Model.hs b/src/Model.hs index c262989..2dcca00 100644 --- a/src/Model.hs +++ b/src/Model.hs @@ -8,3 +8,4 @@ import Model.Auth as M import Model.Amount as M import Model.Journal as M import Model.Avatar as M +import Model.Role as M diff --git a/src/Model/Role.hs b/src/Model/Role.hs index 7156c18..5a9bf22 100644 --- a/src/Model/Role.hs +++ b/src/Model/Role.hs @@ -3,3 +3,100 @@ {-# LANGUAGE Arrows #-} {-# LANGUAGE ScopedTypeVariables #-} module Model.Role where + +import qualified Database.PostgreSQL.Simple as PGS + +import Data.Profunctor.Product (p2, p13) + +import Opaleye as O hiding (null, not) +import Opaleye.Constant as C + +initRole :: PGS.Query +initRole = mconcat + [ "CREATE TABLE IF NOT EXISTS \"role\" (" + , "role_id SERIAL NOT NULL," + , "role_name TEXT NOT NULL," + , "role_can_refill_stock BOOLEAN NOT NULL," + , "role_can_add_product BOOLEAN NOT NULL," + , "role_can_view_journal BOOLEAN NOT NULL," + , "role_can_pay_invoice BOOLEAN NOT NULL," + , "role_can_pay_out BOOLEAN NOT NULL," + , "role_can_manage_products BOOLEAN NOT NULL," + , "role_can_manage_journal BOOLEAN NOT NULL," + , "role_can_manage_users BOOLEAN NOT NULL," + , "role_can_manage_roles BOOLEAN NOT NULL," + , "role_can_manage_suppliers BOOLEAN NOT NULL," + , "role_can_manage_settings BOOLEAN NOT NULL," + , "PRIMARY KEY (role_id)" + , ")" + ] + +initUserToRole :: PGS.Query +initUserToRole = mconcat + [ "CREATE TABLE IF NOT EXISTS \"user_to_role\" (" + , "user_id INTEGER NOT NULL," + , "role_id INTEGER NOT NULL," + , "PRIMARY KEY (user_id, role_id)" + , ")" + ] + +roleTable :: Table + ( Maybe (Field SqlInt4) + , Field SqlText + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + ) + ( Field SqlInt4 + , Field SqlText + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + , Field SqlBool + ) +roleTable = table "role" ( + p13 + ( tableField "role_id" + , tableField "role_name" + , tableField "role_can_refill_stock" + , tableField "role_can_add_product" + , tableField "role_can_view_journal" + , tableField "role_can_pay_invoice" + , tableField "role_can_pay_out" + , tableField "role_can_manage_products" + , tableField "role_can_manage_journal" + , tableField "role_can_manage_users" + , tableField "role_can_manage_roles" + , tableField "role_can_manage_suppliers" + , tableField "role_can_manage_settings" + ) + ) + +userToRoleTable :: Table + ( Field SqlInt4 + , Field SqlInt4 + ) + ( Field SqlInt4 + , Field SqlInt4 + ) +userToRoleTable = table "user_to_role" ( + p2 + ( tableField "user_id" + , tableField "role_id" + ) + )