start implementing roles

This commit is contained in:
nek0 2020-07-19 08:27:15 +02:00
parent 4de00a258b
commit 062ad337c3
6 changed files with 167 additions and 28 deletions

View file

@ -207,6 +207,14 @@ app block_registration initState =
avatarUpdate :<|> avatarUpdate :<|>
avatarList :<|> avatarList :<|>
roleList :<|>
roleNew :<|>
roleUpdate :<|>
roleDelete :<|>
roleAssociationList :<|>
roleAssociationSubmit :<|>
roleAssociationDelete :<|>
metaGet metaGet
) )

View file

@ -68,6 +68,23 @@ type MateAPI = "v1" :> (
:> ReqBody '[JSON] AvatarData :> Patch '[JSON] () :> ReqBody '[JSON] AvatarData :> Patch '[JSON] ()
:<|> "avatar" :> "list" :> Get '[JSON] [Avatar] :<|> "avatar" :> "list" :> Get '[JSON] [Avatar]
:<|> "role" :> "list"
:> Get '[JSON] [Role]
:<|> "role" :> AuthProtect "header-auth" :> ReqBody '[JSON] RoleSubmit
:> Post '[JSON] Int
:<|> "role" :> AuthProtect "header-auth" :> ReqBody '[JSON] Role
:> Patch '[JSON] ()
:<|> "role" :> AuthProtect "header-auth" :> ReqBody '[JSON] Int
:> Delete '[JSON] ()
:<|> "role" :> "assiciation" :> "list"
:> Get '[JSON] [RoleAssociation]
:<|> "role" :> "association" :> AuthProtect "header-auth"
:> ReqBody '[JSON] RoleAssociationSubmit
:> Post '[JSON] Int
:<|> "role" :> "association" :> AuthProtect "header-auth"
:> ReqBody '[JSON] Int
:> Delete '[JSON] ()
:<|> "meta" :> Get '[JSON] MetaInformation :<|> "meta" :> Get '[JSON] MetaInformation
) )
@ -104,6 +121,14 @@ avaterInsertLink :: Link
avatarUpdateLink :: Int -> Link avatarUpdateLink :: Int -> Link
avatarListLink :: Link avatarListLink :: Link
roleListLink :: Link
roleNewLink :: Link
roleUpdateLink :: Link
roleDeleteLink :: Link
roleAssociationListLink :: Link
roleAssociationSubmitLink :: Link
roleAssociationDeleteLink :: Link
metaGetLink :: Link metaGetLink :: Link
( authGetLink :<|> ( authGetLink :<|>
@ -138,5 +163,13 @@ metaGetLink :: Link
avatarUpdateLink :<|> avatarUpdateLink :<|>
avatarListLink :<|> avatarListLink :<|>
roleListLink :<|>
roleNewLink :<|>
roleUpdateLink :<|>
roleDeleteLink :<|>
roleAssociationListLink :<|>
roleAssociationSubmitLink :<|>
roleAssociationDeleteLink :<|>
metaGetLink metaGetLink
) = allLinks (Proxy :: Proxy MateAPI) ) = allLinks (Proxy :: Proxy MateAPI)

38
src/Control/Role.hs Normal file
View file

@ -0,0 +1,38 @@
{-# LANGUAGE OverloadedStrings #-}
module Control.Role where
import Servant
import Control.Monad (void, when)
import Control.Monad.Reader (asks)
import Control.Monad.IO.Class (liftIO)
import qualified Data.Text as T
-- internal imports
import Types
import Model
roleList :: MateHandler [Role]
roleList = do
conn <- asks rsConnection
selectAllRoles conn
roleNew = notImpelemented
roleUpdate = notImpelemented
roleDelete = notImpelemented
roleAssociationList = notImpelemented
roleAssociationSubmit = notImpelemented
roleAssociationDelete = notImpelemented
notImplemented = throwError $ err501
{ errBody = "Function has not yet been implemented!"
}

View file

@ -161,6 +161,35 @@ runInsertInitialRoles conn = do
} }
return $ a ++ b return $ a ++ b
selectAllRoles
:: PGS.Connection
-> MateHandler [Role]
selectAllRoles conn = do
rawRoles <- liftIO $ runSelect conn (
queryTable roleTable
) :: Matehandler
[
( Int
, T.Text
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
, Bool
)
]
return $ map
(\(id_, name, c1, c2, c3, c4, c5, c6, c7, c8, c9 ,c10, c11) ->
Role id_ name c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11)
rawRoles
queryRoleIdByName queryRoleIdByName
:: T.Text :: T.Text
-> PGS.Connection -> PGS.Connection
@ -170,20 +199,22 @@ queryRoleIdByName name con = do
keepWhen (\(_, rname, _, _, _, _, _, _, _, _, _, _, _) -> keepWhen (\(_, rname, _, _, _, _, _, _, _, _, _, _, _) ->
C.constant name == rname) <<< queryTable roleTable C.constant name == rname) <<< queryTable roleTable
) :: MateHandler ) :: MateHandler
( Int [
, T.Text ( Int
, Bool , T.Text
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
) , Bool
)
]
return $ (\(rid, _, _, _, _, _, _, _, _, _, _, _, _) -> rid) (head roles) return $ (\(rid, _, _, _, _, _, _, _, _, _, _, _, _) -> rid) (head roles)
queryRoleIdByCapabilities queryRoleIdByCapabilities
@ -196,20 +227,22 @@ queryRoleIdByName caps con = do
C.constant caps == (c1, c2, c3, vc4, c5, c6, c7, c8, c9, c10, c11)) C.constant caps == (c1, c2, c3, vc4, c5, c6, c7, c8, c9, c10, c11))
<<< queryTable roleTable <<< queryTable roleTable
) :: MateHandler ) :: MateHandler
( Int [
, T.Text ( Int
, Bool , T.Text
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
, Bool , Bool
) , Bool
)
]
return $ (\(rid, _, _, _, _, _, _, _, _, _, _, _, _) -> rid) (head roles) return $ (\(rid, _, _, _, _, _, _, _, _, _, _, _, _) -> rid) (head roles)
associateUserToRole associateUserToRole

View file

@ -11,4 +11,5 @@ import Types.Purchase as T
import Types.Amount as T import Types.Amount as T
import Types.Journal as T import Types.Journal as T
import Types.Avatar as T import Types.Avatar as T
import Types.Role as T
import Types.Meta as T import Types.Meta as T

View file

@ -17,3 +17,29 @@ data Role = Role
, roleCanManageSuppliers :: Bool , roleCanManageSuppliers :: Bool
, roleCanManageSettings :: Bool , roleCanManageSettings :: Bool
} }
data RoleSubmit = RoleSubmit
{ roleSubmitName :: T.Text
, roleSubmitCanRefillStock :: Bool
, roleSubmitCanAddProduct :: Bool
, roleSubmitCanViewJournal :: Bool
, roleSubmitCanPayInvoice :: Bool
, roleSubmitCanPayOut :: Bool
, roleSubmitCanManageProducts :: Bool
, roleSubmitCanManageJournal :: Bool
, roleSubmitCanManageUsers :: Bool
, roleSubmitCanManageRoles :: Bool
, roleSubmitCanManageSuppliers :: Bool
, roleSubmitCanManageSettings :: Bool
}
data RoleAssociation = RoleAssociation
{ roleAssociationId :: Int
, roleAssociationUser :: Int
, roleAssociationRole :: Int
}
data RoleAssociationSubmit = RoleAssociationSubmit
{ roleAssociationSubmitUser :: Int
, roleAssociationSubmitRole :: Int
}