Copyright | (c) Anton Gushcha, 2016 |
---|---|
License | MIT |
Maintainer | ncrashed@gmail.com |
Stability | experimental |
Portability | Portable |
Safe Haskell | None |
Language | Haskell2010 |
- data UserImpl = UserImpl {
- userImplLogin :: !Login
- userImplPassword :: !Password
- userImplEmail :: !Email
- data UserPerm = UserPerm {
- userPermUser :: !(Key UserImpl)
- userPermPermission :: !Permission
- data AuthToken = AuthToken {
- authTokenValue :: !SimpleToken
- authTokenUser :: !(Key UserImpl)
- authTokenExpire :: !UTCTime
- data UserRestore = UserRestore {
- userRestoreValue :: !RestoreCode
- userRestoreUser :: !(Key UserImpl)
- userRestoreExpire :: !UTCTime
- data AuthUserGroup = AuthUserGroup {
- authUserGroupName :: !Text
- authUserGroupParent :: !(Maybe (Key AuthUserGroup))
- data AuthUserGroupUsers = AuthUserGroupUsers {
- authUserGroupUsersGroup :: !(Key AuthUserGroup)
- authUserGroupUsersUser :: !(Key UserImpl)
- data AuthUserGroupPerms = AuthUserGroupPerms {
- authUserGroupPermsGroup :: !(Key AuthUserGroup)
- authUserGroupPermsPermission :: !Permission
- data family EntityField record a :: *
- data UserSingleUseCode = UserSingleUseCode {
- userSingleUseCodeValue :: !SingleUseCode
- userSingleUseCodeUser :: !(Key UserImpl)
- userSingleUseCodeExpire :: !(Maybe UTCTime)
- userSingleUseCodeUsed :: !(Maybe UTCTime)
- type UserImplId = Key UserImpl
- type UserPermId = Key UserPerm
- type AuthTokenId = Key AuthToken
- type UserRestoreId = Key UserRestore
- type AuthUserGroupId = Key AuthUserGroup
- type AuthUserGroupUsersId = Key AuthUserGroupUsers
- type AuthUserGroupPermsId = Key AuthUserGroupPerms
- type UserSingleUseCodeId = Key UserSingleUseCode
- runDB :: (MonadReader AuthConfig m, MonadIO m) => SqlPersistT IO b -> m b
- migrateAll :: Migration
- passToByteString :: Password -> ByteString
- byteStringToPass :: ByteString -> Password
- userToUserInfo :: Entity UserImpl -> [Permission] -> [UserGroupId] -> RespUserInfo
- readUserInfo :: UserId -> SqlPersistT IO (Maybe RespUserInfo)
- readUserInfoByLogin :: Login -> SqlPersistT IO (Maybe RespUserInfo)
- getUserPermissions :: UserImplId -> SqlPersistT IO [Permission]
- setUserPermissions :: UserImplId -> [Permission] -> SqlPersistT IO ()
- createUser :: Int -> Login -> Password -> Email -> [Permission] -> SqlPersistT IO UserImplId
- hasPerm :: UserImplId -> Permission -> SqlPersistT IO Bool
- hasPerms :: UserImplId -> [Permission] -> SqlPersistT IO Bool
- createAdmin :: Int -> Login -> Password -> Email -> SqlPersistT IO UserImplId
- ensureAdmin :: Int -> Login -> Password -> Email -> SqlPersistT IO ()
- patchUser :: Int -> PatchUser -> Entity UserImpl -> SqlPersistT IO (Entity UserImpl)
- setUserPassword' :: MonadIO m => Int -> Password -> UserImpl -> m UserImpl
- getUserGroups :: UserImplId -> SqlPersistT IO [UserGroupId]
- setUserGroups :: UserImplId -> [UserGroupId] -> SqlPersistT IO ()
- validateGroups :: [UserGroupId] -> SqlPersistT IO [AuthUserGroupId]
- getGroupPermissions :: UserGroupId -> SqlPersistT IO [Permission]
- getUserGroupPermissions :: UserImplId -> SqlPersistT IO [Permission]
- getUserAllPermissions :: UserImplId -> SqlPersistT IO [Permission]
- readUserGroup :: UserGroupId -> SqlPersistT IO (Maybe UserGroup)
- toAuthUserGroup :: UserGroup -> (AuthUserGroup, AuthUserGroupId -> [AuthUserGroupUsers], AuthUserGroupId -> [AuthUserGroupPerms])
- insertUserGroup :: UserGroup -> SqlPersistT IO UserGroupId
- updateUserGroup :: UserGroupId -> UserGroup -> SqlPersistT IO ()
- deleteUserGroup :: UserGroupId -> SqlPersistT IO ()
- patchUserGroup :: UserGroupId -> PatchUserGroup -> SqlPersistT IO ()
DB entities
UserImpl | |
|
Show UserImpl Source # | |
Generic UserImpl Source # | |
PersistFieldSql UserImpl Source # | |
PersistField UserImpl Source # | |
PersistEntity UserImpl Source # | |
ToBackendKey SqlBackend UserImpl Source # | |
(PersistQuery backend, (~) * (PersistEntityBackend UserImpl) (BaseBackend backend)) => DeleteCascade UserImpl backend Source # | |
Eq (Key UserImpl) Source # | |
Ord (Key UserImpl) Source # | |
Read (Key UserImpl) Source # | |
Show (Key UserImpl) Source # | |
PersistFieldSql (Key UserImpl) Source # | |
PersistField (Key UserImpl) Source # | |
ToJSON (Key UserImpl) Source # | |
ToHttpApiData (Key UserImpl) Source # | |
FromJSON (Key UserImpl) Source # | |
FromHttpApiData (Key UserImpl) Source # | |
PathPiece (Key UserImpl) Source # | |
type Rep UserImpl Source # | |
data Unique UserImpl Source # | |
type PersistEntityBackend UserImpl Source # | |
data Key UserImpl Source # | |
data EntityField UserImpl Source # | |
UserPerm | |
|
Show UserPerm Source # | |
Generic UserPerm Source # | |
PersistFieldSql UserPerm Source # | |
PersistField UserPerm Source # | |
PersistEntity UserPerm Source # | |
ToBackendKey SqlBackend UserPerm Source # | |
(PersistQuery backend, (~) * (PersistEntityBackend UserPerm) (BaseBackend backend)) => DeleteCascade UserPerm backend Source # | |
Eq (Key UserPerm) Source # | |
Ord (Key UserPerm) Source # | |
Read (Key UserPerm) Source # | |
Show (Key UserPerm) Source # | |
PersistFieldSql (Key UserPerm) Source # | |
PersistField (Key UserPerm) Source # | |
ToJSON (Key UserPerm) Source # | |
ToHttpApiData (Key UserPerm) Source # | |
FromJSON (Key UserPerm) Source # | |
FromHttpApiData (Key UserPerm) Source # | |
PathPiece (Key UserPerm) Source # | |
type Rep UserPerm Source # | |
data Unique UserPerm Source # | |
type PersistEntityBackend UserPerm Source # | |
data Key UserPerm Source # | |
data EntityField UserPerm Source # | |
AuthToken | |
|
Show AuthToken Source # | |
Generic AuthToken Source # | |
PersistFieldSql AuthToken Source # | |
PersistField AuthToken Source # | |
PersistEntity AuthToken Source # | |
ToBackendKey SqlBackend AuthToken Source # | |
(PersistQuery backend, (~) * (PersistEntityBackend AuthToken) (BaseBackend backend)) => DeleteCascade AuthToken backend Source # | |
Eq (Key AuthToken) Source # | |
Ord (Key AuthToken) Source # | |
Read (Key AuthToken) Source # | |
Show (Key AuthToken) Source # | |
PersistFieldSql (Key AuthToken) Source # | |
PersistField (Key AuthToken) Source # | |
ToJSON (Key AuthToken) Source # | |
ToHttpApiData (Key AuthToken) Source # | |
FromJSON (Key AuthToken) Source # | |
FromHttpApiData (Key AuthToken) Source # | |
PathPiece (Key AuthToken) Source # | |
type Rep AuthToken Source # | |
data Unique AuthToken Source # | |
type PersistEntityBackend AuthToken Source # | |
data Key AuthToken Source # | |
data EntityField AuthToken Source # | |
data UserRestore Source #
UserRestore | |
|
Show UserRestore Source # | |
Generic UserRestore Source # | |
PersistFieldSql UserRestore Source # | |
PersistField UserRestore Source # | |
PersistEntity UserRestore Source # | |
ToBackendKey SqlBackend UserRestore Source # | |
(PersistQuery backend, (~) * (PersistEntityBackend UserRestore) (BaseBackend backend)) => DeleteCascade UserRestore backend Source # | |
Eq (Key UserRestore) Source # | |
Ord (Key UserRestore) Source # | |
Read (Key UserRestore) Source # | |
Show (Key UserRestore) Source # | |
PersistFieldSql (Key UserRestore) Source # | |
PersistField (Key UserRestore) Source # | |
ToJSON (Key UserRestore) Source # | |
ToHttpApiData (Key UserRestore) Source # | |
FromJSON (Key UserRestore) Source # | |
FromHttpApiData (Key UserRestore) Source # | |
PathPiece (Key UserRestore) Source # | |
type Rep UserRestore Source # | |
data Unique UserRestore Source # | |
type PersistEntityBackend UserRestore Source # | |
data Key UserRestore Source # | |
data EntityField UserRestore Source # | |
data AuthUserGroup Source #
AuthUserGroup | |
|
Show AuthUserGroup Source # | |
Generic AuthUserGroup Source # | |
PersistFieldSql AuthUserGroup Source # | |
PersistField AuthUserGroup Source # | |
PersistEntity AuthUserGroup Source # | |
ToBackendKey SqlBackend AuthUserGroup Source # | |
(PersistQuery backend, (~) * (PersistEntityBackend AuthUserGroup) (BaseBackend backend)) => DeleteCascade AuthUserGroup backend Source # | |
Eq (Key AuthUserGroup) Source # | |
Ord (Key AuthUserGroup) Source # | |
Read (Key AuthUserGroup) Source # | |
Show (Key AuthUserGroup) Source # | |
PersistFieldSql (Key AuthUserGroup) Source # | |
PersistField (Key AuthUserGroup) Source # | |
ToJSON (Key AuthUserGroup) Source # | |
ToHttpApiData (Key AuthUserGroup) Source # | |
FromJSON (Key AuthUserGroup) Source # | |
FromHttpApiData (Key AuthUserGroup) Source # | |
PathPiece (Key AuthUserGroup) Source # | |
type Rep AuthUserGroup Source # | |
data Unique AuthUserGroup Source # | |
type PersistEntityBackend AuthUserGroup Source # | |
data Key AuthUserGroup Source # | |
data EntityField AuthUserGroup Source # | |
data AuthUserGroupUsers Source #
AuthUserGroupUsers | |
|
data AuthUserGroupPerms Source #
AuthUserGroupPerms | |
|
data family EntityField record a :: * #
data EntityField AuthUserGroupPerms # | |
data EntityField AuthUserGroupUsers # | |
data EntityField AuthUserGroup # | |
data EntityField UserSingleUseCode # | |
data EntityField UserRestore # | |
data EntityField AuthToken # | |
data EntityField UserPerm # | |
data EntityField UserImpl # | |
data UserSingleUseCode Source #
UserSingleUseCode | |
|
IDs of entities
type UserImplId = Key UserImpl Source #
type UserPermId = Key UserPerm Source #
type AuthTokenId = Key AuthToken Source #
type UserRestoreId = Key UserRestore Source #
type AuthUserGroupId = Key AuthUserGroup Source #
type AuthUserGroupUsersId = Key AuthUserGroupUsers Source #
type AuthUserGroupPermsId = Key AuthUserGroupPerms Source #
type UserSingleUseCodeId = Key UserSingleUseCode Source #
Operations
runDB :: (MonadReader AuthConfig m, MonadIO m) => SqlPersistT IO b -> m b Source #
Execute database transaction
migrateAll :: Migration Source #
passToByteString :: Password -> ByteString Source #
Convert password to bytestring
byteStringToPass :: ByteString -> Password Source #
Convert bytestring into password
User
userToUserInfo :: Entity UserImpl -> [Permission] -> [UserGroupId] -> RespUserInfo Source #
Helper to convert user to response
readUserInfo :: UserId -> SqlPersistT IO (Maybe RespUserInfo) Source #
Get user by id
readUserInfoByLogin :: Login -> SqlPersistT IO (Maybe RespUserInfo) Source #
Get user by login
getUserPermissions :: UserImplId -> SqlPersistT IO [Permission] Source #
Return list of permissions for the given user (only permissions that are assigned to him directly)
setUserPermissions :: UserImplId -> [Permission] -> SqlPersistT IO () Source #
Return list of permissions for the given user
createUser :: Int -> Login -> Password -> Email -> [Permission] -> SqlPersistT IO UserImplId Source #
Creation of new user
hasPerm :: UserImplId -> Permission -> SqlPersistT IO Bool Source #
Check whether the user has particular permission
hasPerms :: UserImplId -> [Permission] -> SqlPersistT IO Bool Source #
Check whether the user has particular permissions
createAdmin :: Int -> Login -> Password -> Email -> SqlPersistT IO UserImplId Source #
Creates user with admin privileges
ensureAdmin :: Int -> Login -> Password -> Email -> SqlPersistT IO () Source #
Ensures that DB has at leas one admin, if not, creates a new one with specified info.
Apply patches for user
Update password of user
User groups
getUserGroups :: UserImplId -> SqlPersistT IO [UserGroupId] Source #
Get all groups the user belongs to
setUserGroups :: UserImplId -> [UserGroupId] -> SqlPersistT IO () Source #
Rewrite all user groups
validateGroups :: [UserGroupId] -> SqlPersistT IO [AuthUserGroupId] Source #
Leave only existing groups
getGroupPermissions :: UserGroupId -> SqlPersistT IO [Permission] Source #
Getting permission of a group and all it parent groups
getUserGroupPermissions :: UserImplId -> SqlPersistT IO [Permission] Source #
Get user permissions that are assigned to him/her via groups only
getUserAllPermissions :: UserImplId -> SqlPersistT IO [Permission] Source #
Get user permissions that are assigned to him/her either by direct way or by his/her groups.
readUserGroup :: UserGroupId -> SqlPersistT IO (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 :: UserGroup -> SqlPersistT IO UserGroupId Source #
Insert user group into RDBMS
updateUserGroup :: UserGroupId -> UserGroup -> SqlPersistT IO () Source #
Replace user group with new value
deleteUserGroup :: UserGroupId -> SqlPersistT IO () Source #
Erase user group from RDBMS, cascade
patchUserGroup :: UserGroupId -> PatchUserGroup -> SqlPersistT IO () Source #
Partial update of user group