| Copyright | (c) Anton Gushcha, 2016 |
|---|---|
| License | MIT |
| Maintainer | ncrashed@gmail.com |
| Stability | experimental |
| Portability | Portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Servant.Server.Auth.Token.Model
Description
- 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
Constructors
| UserImpl | |
Fields
| |
Instances
| 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 # | |
Constructors
| UserPerm | |
Fields
| |
Instances
| 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 # | |
Constructors
| AuthToken | |
Fields
| |
Instances
| 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 #
Constructors
| UserRestore | |
Fields
| |
Instances
| 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 #
Constructors
| AuthUserGroup | |
Fields
| |
Instances
| 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 #
Constructors
| AuthUserGroupUsers | |
Fields
| |
Instances
data AuthUserGroupPerms Source #
Constructors
| AuthUserGroupPerms | |
Fields
| |
Instances
data family EntityField record a :: * #
Instances
| 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 #
Constructors
| UserSingleUseCode | |
Fields
| |
Instances
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