Copyright | (c) Anton Gushcha 2016 |
---|---|
License | MIT |
Maintainer | ncrashed@gmail.com |
Stability | experimental |
Portability | Portable |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- data UserImpl = UserImpl {
- userImplLogin :: !Login
- userImplPassword :: !Password
- userImplEmail :: !Email
- data UserPerm = UserPerm {}
- data AuthToken = AuthToken {}
- data UserRestore = UserRestore {}
- data AuthUserGroup = AuthUserGroup {}
- data AuthUserGroupUsers = AuthUserGroupUsers {}
- data AuthUserGroupPerms = AuthUserGroupPerms {}
- data UserSingleUseCode = UserSingleUseCode {}
- data UserImplId
- data UserPermId
- data AuthTokenId
- data UserRestoreId
- data AuthUserGroupId
- data AuthUserGroupUsersId
- data AuthUserGroupPermsId
- data UserSingleUseCodeId
- class MonadIO m => HasStorage m where
- passToByteString :: Password -> ByteString
- byteStringToPass :: ByteString -> Password
- userToUserInfo :: WithId UserImplId UserImpl -> [Permission] -> [UserGroupId] -> RespUserInfo
- readUserInfo :: HasStorage m => UserId -> m (Maybe RespUserInfo)
- readUserInfoByLogin :: HasStorage m => Login -> m (Maybe RespUserInfo)
- getUserPermissions :: HasStorage m => UserImplId -> m [Permission]
- setUserPermissions :: HasStorage m => UserImplId -> [Permission] -> m ()
- createUser :: HasStorage m => Int -> Login -> Password -> Email -> [Permission] -> m UserImplId
- hasPerms :: HasStorage m => UserImplId -> [Permission] -> m Bool
- createAdmin :: HasStorage m => Int -> Login -> Password -> Email -> m UserImplId
- ensureAdmin :: HasStorage m => Int -> Login -> Password -> Email -> m ()
- patchUser :: HasStorage m => Int -> PatchUser -> WithId UserImplId UserImpl -> m (WithId UserImplId UserImpl)
- setUserPassword' :: MonadIO m => Int -> Password -> UserImpl -> m UserImpl
- getUserGroups :: HasStorage m => UserImplId -> m [UserGroupId]
- setUserGroups :: HasStorage m => UserImplId -> [UserGroupId] -> m ()
- validateGroups :: HasStorage m => [UserGroupId] -> m [AuthUserGroupId]
- getGroupPermissions :: HasStorage m => UserGroupId -> m [Permission]
- getUserGroupPermissions :: HasStorage m => UserImplId -> m [Permission]
- getUserAllPermissions :: HasStorage m => UserImplId -> m [Permission]
- readUserGroup :: HasStorage m => UserGroupId -> m (Maybe UserGroup)
- toAuthUserGroup :: UserGroup -> (AuthUserGroup, AuthUserGroupId -> [AuthUserGroupUsers], AuthUserGroupId -> [AuthUserGroupPerms])
- insertUserGroup :: HasStorage m => UserGroup -> m UserGroupId
- updateUserGroup :: HasStorage m => UserGroupId -> UserGroup -> m ()
- deleteUserGroup :: HasStorage m => UserGroupId -> m ()
- patchUserGroup :: HasStorage m => UserGroupId -> PatchUserGroup -> m ()
- makeUserInfo :: HasStorage m => WithId UserImplId UserImpl -> m RespUserInfo
DB entities
Internal user implementation
UserImpl | |
|
Instances
Show UserImpl Source # | |
Generic UserImpl Source # | |
type Rep UserImpl Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep UserImpl = D1 (MetaData "UserImpl" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "UserImpl" PrefixI True) (S1 (MetaSel (Just "userImplLogin") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Login) :*: (S1 (MetaSel (Just "userImplPassword") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Password) :*: S1 (MetaSel (Just "userImplEmail") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Email)))) |
Internal implementation of permission (1-M)
UserPerm | |
|
Instances
Show UserPerm Source # | |
Generic UserPerm Source # | |
type Rep UserPerm Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep UserPerm = D1 (MetaData "UserPerm" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "UserPerm" PrefixI True) (S1 (MetaSel (Just "userPermUser") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UserImplId) :*: S1 (MetaSel (Just "userPermPermission") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Permission))) |
Internal implementation of authorisation token
AuthToken | |
|
Instances
Show AuthToken Source # | |
Generic AuthToken Source # | |
type Rep AuthToken Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthToken = D1 (MetaData "AuthToken" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "AuthToken" PrefixI True) (S1 (MetaSel (Just "authTokenValue") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 SimpleToken) :*: (S1 (MetaSel (Just "authTokenUser") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UserImplId) :*: S1 (MetaSel (Just "authTokenExpire") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UTCTime)))) |
data UserRestore Source #
Internal implementation of restoration code
UserRestore | |
|
Instances
Show UserRestore Source # | |
Defined in Servant.Server.Auth.Token.Model showsPrec :: Int -> UserRestore -> ShowS # show :: UserRestore -> String # showList :: [UserRestore] -> ShowS # | |
Generic UserRestore Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep UserRestore :: * -> * # from :: UserRestore -> Rep UserRestore x # to :: Rep UserRestore x -> UserRestore # | |
type Rep UserRestore Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep UserRestore = D1 (MetaData "UserRestore" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "UserRestore" PrefixI True) (S1 (MetaSel (Just "userRestoreValue") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 RestoreCode) :*: (S1 (MetaSel (Just "userRestoreUser") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UserImplId) :*: S1 (MetaSel (Just "userRestoreExpire") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UTCTime)))) |
data AuthUserGroup Source #
Internal implementation of user group
AuthUserGroup | |
|
Instances
Show AuthUserGroup Source # | |
Defined in Servant.Server.Auth.Token.Model showsPrec :: Int -> AuthUserGroup -> ShowS # show :: AuthUserGroup -> String # showList :: [AuthUserGroup] -> ShowS # | |
Generic AuthUserGroup Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroup :: * -> * # from :: AuthUserGroup -> Rep AuthUserGroup x # to :: Rep AuthUserGroup x -> AuthUserGroup # | |
type Rep AuthUserGroup Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroup = D1 (MetaData "AuthUserGroup" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "AuthUserGroup" PrefixI True) (S1 (MetaSel (Just "authUserGroupName") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 Text) :*: S1 (MetaSel (Just "authUserGroupParent") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (Maybe AuthUserGroupId)))) |
data AuthUserGroupUsers Source #
Implementation of M-M between user and group
Instances
Show AuthUserGroupUsers Source # | |
Defined in Servant.Server.Auth.Token.Model showsPrec :: Int -> AuthUserGroupUsers -> ShowS # show :: AuthUserGroupUsers -> String # showList :: [AuthUserGroupUsers] -> ShowS # | |
Generic AuthUserGroupUsers Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroupUsers :: * -> * # from :: AuthUserGroupUsers -> Rep AuthUserGroupUsers x # to :: Rep AuthUserGroupUsers x -> AuthUserGroupUsers # | |
type Rep AuthUserGroupUsers Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroupUsers = D1 (MetaData "AuthUserGroupUsers" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "AuthUserGroupUsers" PrefixI True) (S1 (MetaSel (Just "authUserGroupUsersGroup") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 AuthUserGroupId) :*: S1 (MetaSel (Just "authUserGroupUsersUser") NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 UserImplId))) |
data AuthUserGroupPerms Source #
Implementation of M-M between permission and group
Instances
Show AuthUserGroupPerms Source # | |
Defined in Servant.Server.Auth.Token.Model showsPrec :: Int -> AuthUserGroupPerms -> ShowS # show :: AuthUserGroupPerms -> String # showList :: [AuthUserGroupPerms] -> ShowS # | |
Generic AuthUserGroupPerms Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroupPerms :: * -> * # from :: AuthUserGroupPerms -> Rep AuthUserGroupPerms x # to :: Rep AuthUserGroupPerms x -> AuthUserGroupPerms # | |
type Rep AuthUserGroupPerms Source # | |
Defined in Servant.Server.Auth.Token.Model type Rep AuthUserGroupPerms = D1 (MetaData "AuthUserGroupPerms" "Servant.Server.Auth.Token.Model" "servant-auth-token-0.5.4.0-LmMa4gnsmOZBo06ls3QnQg" False) (C1 (MetaCons "AuthUserGroupPerms" PrefixI True) (S1 (MetaSel (Just "authUserGroupPermsGroup") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 AuthUserGroupId) :*: S1 (MetaSel (Just "authUserGroupPermsPermission") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Permission))) |
data UserSingleUseCode Source #
Internal implementation of single use code
UserSingleUseCode | |
|
Instances
IDs of entities
data UserImplId Source #
ID of user
Instances
data UserPermId Source #
ID of user permission
Instances
data AuthTokenId Source #
ID of authorisation token
Instances
data UserRestoreId Source #
ID of restoration code
Instances
data AuthUserGroupId Source #
ID of user group
Instances
data AuthUserGroupUsersId Source #
ID of user-group binding
Instances
data AuthUserGroupPermsId Source #
ID of permission-group binding
Instances
data UserSingleUseCodeId Source #
ID of single use code
Instances
DB interface
class MonadIO m => HasStorage m where Source #
Abstract storage interface. External libraries can implement this in terms of PostgreSQL or acid-state.
getUserImpl :: UserImplId -> m (Maybe UserImpl) Source #
Getting user from storage
getUserImpl :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m (Maybe UserImpl) Source #
Getting user from storage
getUserImplByLogin :: Login -> m (Maybe (WithId UserImplId UserImpl)) Source #
Getting user from storage by login
getUserImplByLogin :: (m ~ t n, MonadTrans t, HasStorage n) => Login -> m (Maybe (WithId UserImplId UserImpl)) Source #
Getting user from storage by login
listUsersPaged :: Page -> PageSize -> m ([WithId UserImplId UserImpl], Word) Source #
Get paged list of users and total count of users
listUsersPaged :: (m ~ t n, MonadTrans t, HasStorage n) => Page -> PageSize -> m ([WithId UserImplId UserImpl], Word) Source #
Get paged list of users and total count of users
getUserImplPermissions :: UserImplId -> m [WithId UserPermId UserPerm] Source #
Get user permissions, ascending by tag
getUserImplPermissions :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m [WithId UserPermId UserPerm] Source #
Get user permissions, ascending by tag
deleteUserPermissions :: UserImplId -> m () Source #
Delete user permissions
deleteUserPermissions :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m () Source #
Delete user permissions
insertUserPerm :: UserPerm -> m UserPermId Source #
Insertion of new user permission
insertUserPerm :: (m ~ t n, MonadTrans t, HasStorage n) => UserPerm -> m UserPermId Source #
Insertion of new user permission
insertUserImpl :: UserImpl -> m UserImplId Source #
Insertion of new user
insertUserImpl :: (m ~ t n, MonadTrans t, HasStorage n) => UserImpl -> m UserImplId Source #
Insertion of new user
replaceUserImpl :: UserImplId -> UserImpl -> m () Source #
Replace user with new value
replaceUserImpl :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> UserImpl -> m () Source #
Replace user with new value
deleteUserImpl :: UserImplId -> m () Source #
Delete user by id
deleteUserImpl :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m () Source #
Delete user by id
hasPerm :: UserImplId -> Permission -> m Bool Source #
Check whether the user has particular permission
hasPerm :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> Permission -> m Bool Source #
Check whether the user has particular permission
getFirstUserByPerm :: Permission -> m (Maybe (WithId UserImplId UserImpl)) Source #
Get any user with given permission
getFirstUserByPerm :: (m ~ t n, MonadTrans t, HasStorage n) => Permission -> m (Maybe (WithId UserImplId UserImpl)) Source #
Get any user with given permission
selectUserImplGroups :: UserImplId -> m [WithId AuthUserGroupUsersId AuthUserGroupUsers] Source #
Select user groups and sort them by ascending name
selectUserImplGroups :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m [WithId AuthUserGroupUsersId AuthUserGroupUsers] Source #
Select user groups and sort them by ascending name
clearUserImplGroups :: UserImplId -> m () Source #
Remove user from all groups
clearUserImplGroups :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> m () Source #
Remove user from all groups
insertAuthUserGroup :: AuthUserGroup -> m AuthUserGroupId Source #
Add new user group
insertAuthUserGroup :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroup -> m AuthUserGroupId Source #
Add new user group
insertAuthUserGroupUsers :: AuthUserGroupUsers -> m AuthUserGroupUsersId Source #
Add user to given group
insertAuthUserGroupUsers :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupUsers -> m AuthUserGroupUsersId Source #
Add user to given group
insertAuthUserGroupPerms :: AuthUserGroupPerms -> m AuthUserGroupPermsId Source #
Add permission to given group
insertAuthUserGroupPerms :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupPerms -> m AuthUserGroupPermsId Source #
Add permission to given group
getAuthUserGroup :: AuthUserGroupId -> m (Maybe AuthUserGroup) Source #
Find user group by id
getAuthUserGroup :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m (Maybe AuthUserGroup) Source #
Find user group by id
listAuthUserGroupPermissions :: AuthUserGroupId -> m [WithId AuthUserGroupPermsId AuthUserGroupPerms] Source #
Get list of permissions of given group
listAuthUserGroupPermissions :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m [WithId AuthUserGroupPermsId AuthUserGroupPerms] Source #
Get list of permissions of given group
listAuthUserGroupUsers :: AuthUserGroupId -> m [WithId AuthUserGroupUsersId AuthUserGroupUsers] Source #
Get list of all users of the group
listAuthUserGroupUsers :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m [WithId AuthUserGroupUsersId AuthUserGroupUsers] Source #
Get list of all users of the group
replaceAuthUserGroup :: AuthUserGroupId -> AuthUserGroup -> m () Source #
Replace record of user group
replaceAuthUserGroup :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> AuthUserGroup -> m () Source #
Replace record of user group
clearAuthUserGroupUsers :: AuthUserGroupId -> m () Source #
Remove all users from group
clearAuthUserGroupUsers :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m () Source #
Remove all users from group
clearAuthUserGroupPerms :: AuthUserGroupId -> m () Source #
Remove all permissions from group
clearAuthUserGroupPerms :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m () Source #
Remove all permissions from group
deleteAuthUserGroup :: AuthUserGroupId -> m () Source #
Delete user group from storage
deleteAuthUserGroup :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> m () Source #
Delete user group from storage
listGroupsPaged :: Page -> PageSize -> m ([WithId AuthUserGroupId AuthUserGroup], Word) Source #
Get paged list of user groups with total count
listGroupsPaged :: (m ~ t n, MonadTrans t, HasStorage n) => Page -> PageSize -> m ([WithId AuthUserGroupId AuthUserGroup], Word) Source #
Get paged list of user groups with total count
setAuthUserGroupName :: AuthUserGroupId -> Text -> m () Source #
Set group name
setAuthUserGroupName :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> Text -> m () Source #
Set group name
setAuthUserGroupParent :: AuthUserGroupId -> Maybe AuthUserGroupId -> m () Source #
Set group parent
setAuthUserGroupParent :: (m ~ t n, MonadTrans t, HasStorage n) => AuthUserGroupId -> Maybe AuthUserGroupId -> m () Source #
Set group parent
insertSingleUseCode :: UserSingleUseCode -> m UserSingleUseCodeId Source #
Add new single use code
insertSingleUseCode :: (m ~ t n, MonadTrans t, HasStorage n) => UserSingleUseCode -> m UserSingleUseCodeId Source #
Add new single use code
setSingleUseCodeUsed :: UserSingleUseCodeId -> Maybe UTCTime -> m () Source #
Set usage time of the single use code
setSingleUseCodeUsed :: (m ~ t n, MonadTrans t, HasStorage n) => UserSingleUseCodeId -> Maybe UTCTime -> m () Source #
Set usage time of the single use code
getUnusedCode :: SingleUseCode -> UserImplId -> UTCTime -> m (Maybe (WithId UserSingleUseCodeId UserSingleUseCode)) Source #
Find unused code for the user and expiration time greater than the given time
getUnusedCode :: (m ~ t n, MonadTrans t, HasStorage n) => SingleUseCode -> UserImplId -> UTCTime -> m (Maybe (WithId UserSingleUseCodeId UserSingleUseCode)) Source #
Find unused code for the user and expiration time greater than the given time
invalidatePermanentCodes :: UserImplId -> UTCTime -> m () Source #
Invalidate all permanent codes for user and set use time for them
invalidatePermanentCodes :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> UTCTime -> m () Source #
Invalidate all permanent codes for user and set use time for them
selectLastRestoreCode :: UserImplId -> UTCTime -> m (Maybe (WithId UserRestoreId UserRestore)) Source #
Select last valid restoration code by the given current time
selectLastRestoreCode :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> UTCTime -> m (Maybe (WithId UserRestoreId UserRestore)) Source #
Select last valid restoration code by the given current time
insertUserRestore :: UserRestore -> m UserRestoreId Source #
Insert new restore code
insertUserRestore :: (m ~ t n, MonadTrans t, HasStorage n) => UserRestore -> m UserRestoreId Source #
Insert new restore code
findRestoreCode :: UserImplId -> RestoreCode -> UTCTime -> m (Maybe (WithId UserRestoreId UserRestore)) Source #
Find unexpired by the time restore code
findRestoreCode :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> RestoreCode -> UTCTime -> m (Maybe (WithId UserRestoreId UserRestore)) Source #
Find unexpired by the time restore code
replaceRestoreCode :: UserRestoreId -> UserRestore -> m () Source #
Replace restore code with new value
replaceRestoreCode :: (m ~ t n, MonadTrans t, HasStorage n) => UserRestoreId -> UserRestore -> m () Source #
Replace restore code with new value
findAuthToken :: UserImplId -> UTCTime -> m (Maybe (WithId AuthTokenId AuthToken)) Source #
Find first non-expired by the time token for user
findAuthToken :: (m ~ t n, MonadTrans t, HasStorage n) => UserImplId -> UTCTime -> m (Maybe (WithId AuthTokenId AuthToken)) Source #
Find first non-expired by the time token for user
findAuthTokenByValue :: SimpleToken -> m (Maybe (WithId AuthTokenId AuthToken)) Source #
Find token by value
findAuthTokenByValue :: (m ~ t n, MonadTrans t, HasStorage n) => SimpleToken -> m (Maybe (WithId AuthTokenId AuthToken)) Source #
Find token by value
insertAuthToken :: AuthToken -> m AuthTokenId Source #
Insert new token
insertAuthToken :: (m ~ t n, MonadTrans t, HasStorage n) => AuthToken -> m AuthTokenId Source #
Insert new token
replaceAuthToken :: AuthTokenId -> AuthToken -> m () Source #
Replace auth token with new value
replaceAuthToken :: (m ~ t n, MonadTrans t, HasStorage n) => AuthTokenId -> AuthToken -> m () Source #
Replace auth token with new value
Instances
Operations
passToByteString :: Password -> ByteString Source #
Convert password to bytestring
byteStringToPass :: ByteString -> Password Source #
Convert bytestring into password
User
userToUserInfo :: WithId UserImplId UserImpl -> [Permission] -> [UserGroupId] -> RespUserInfo Source #
Helper to convert user to response
readUserInfo :: HasStorage m => UserId -> m (Maybe RespUserInfo) Source #
Get user by id
readUserInfoByLogin :: HasStorage m => Login -> m (Maybe RespUserInfo) Source #
Get user by login
getUserPermissions :: HasStorage m => UserImplId -> m [Permission] Source #
Return list of permissions for the given user (only permissions that are assigned to him directly)
setUserPermissions :: HasStorage m => UserImplId -> [Permission] -> m () Source #
Return list of permissions for the given user
createUser :: HasStorage m => Int -> Login -> Password -> Email -> [Permission] -> m UserImplId Source #
Creation of new user
hasPerms :: HasStorage m => UserImplId -> [Permission] -> m Bool Source #
Check whether the user has particular permissions
createAdmin :: HasStorage m => Int -> Login -> Password -> Email -> m UserImplId Source #
Creates user with admin privileges
ensureAdmin :: HasStorage m => Int -> Login -> Password -> Email -> m () Source #
Ensures that DB has at leas one admin, if not, creates a new one with specified info.
:: HasStorage m | |
=> Int | Password strength |
-> PatchUser | |
-> WithId UserImplId UserImpl | |
-> m (WithId UserImplId UserImpl) |
Apply patches for user
Update password of user
User groups
getUserGroups :: HasStorage m => UserImplId -> m [UserGroupId] Source #
Get all groups the user belongs to
setUserGroups :: HasStorage m => UserImplId -> [UserGroupId] -> m () Source #
Rewrite all user groups
validateGroups :: HasStorage m => [UserGroupId] -> m [AuthUserGroupId] Source #
Leave only existing groups
getGroupPermissions :: HasStorage m => UserGroupId -> m [Permission] Source #
Getting permission of a group and all it parent groups
getUserGroupPermissions :: HasStorage m => UserImplId -> m [Permission] Source #
Get user permissions that are assigned to him/her via groups only
getUserAllPermissions :: HasStorage m => UserImplId -> m [Permission] Source #
Get user permissions that are assigned to him/her either by direct way or by his/her groups.
readUserGroup :: HasStorage m => UserGroupId -> m (Maybe UserGroup) Source #
Collect full info about user group from RDBMS
toAuthUserGroup :: UserGroup -> (AuthUserGroup, AuthUserGroupId -> [AuthUserGroupUsers], AuthUserGroupId -> [AuthUserGroupPerms]) Source #
Helper to convert user group into values of several tables
insertUserGroup :: HasStorage m => UserGroup -> m UserGroupId Source #
Insert user group into RDBMS
updateUserGroup :: HasStorage m => UserGroupId -> UserGroup -> m () Source #
Replace user group with new value
deleteUserGroup :: HasStorage m => UserGroupId -> m () Source #
Erase user group from RDBMS, cascade
patchUserGroup :: HasStorage m => UserGroupId -> PatchUserGroup -> m () Source #
Partial update of user group
Low-level
makeUserInfo :: HasStorage m => WithId UserImplId UserImpl -> m RespUserInfo Source #
Low level operation for collecting info about user