Initial commit
This commit is contained in:
+67
@@ -0,0 +1,67 @@
|
||||
import hash from '@adonisjs/core/services/hash'
|
||||
import { compose } from '@adonisjs/core/helpers'
|
||||
import { withAuthFinder } from '@adonisjs/auth/mixins/lucid'
|
||||
import { DbAccessTokensProvider } from '@adonisjs/auth/access_tokens'
|
||||
import { BaseModel, column, manyToMany } from '@adonisjs/lucid/orm'
|
||||
import type { ManyToMany } from '@adonisjs/lucid/types/relations'
|
||||
import { DateTime } from 'luxon'
|
||||
import Role from '#base_modules/Role/model/role'
|
||||
import Permission from '#base_modules/Permission/model/permission'
|
||||
|
||||
const AuthFinder = withAuthFinder(() => hash.use('scrypt'), {
|
||||
uids: ['email'],
|
||||
passwordColumnName: 'password',
|
||||
})
|
||||
|
||||
const ComposedModel = compose(BaseModel, AuthFinder) as typeof BaseModel
|
||||
|
||||
export default class Admins extends ComposedModel {
|
||||
static searchable = {
|
||||
string: ['email', 'first_name', 'last_name'],
|
||||
number: ['id'],
|
||||
}
|
||||
|
||||
@column({ isPrimary: true, columnName: 'id' })
|
||||
declare id: number
|
||||
|
||||
@column({ columnName: 'first_name' })
|
||||
declare firstName: string | null
|
||||
|
||||
@column({ columnName: 'last_name' })
|
||||
declare lastName: string | null
|
||||
|
||||
@column({ columnName: 'email' })
|
||||
declare email: string
|
||||
|
||||
@column({ columnName: 'status' })
|
||||
declare status: 'active' | 'inactive'
|
||||
|
||||
@column({ serializeAs: null, columnName: 'password' })
|
||||
declare password: string
|
||||
|
||||
@column.dateTime({ autoCreate: true, columnName: 'created_at' })
|
||||
declare createdAt: DateTime
|
||||
|
||||
@column.dateTime({ autoCreate: true, autoUpdate: true, columnName: 'updated_at' })
|
||||
declare updatedAt: DateTime | null
|
||||
|
||||
@manyToMany(() => Role, {
|
||||
pivotTable: 'admin_roles',
|
||||
pivotForeignKey: 'admin_id',
|
||||
pivotRelatedForeignKey: 'role_id',
|
||||
})
|
||||
declare roles: ManyToMany<typeof Role>
|
||||
|
||||
declare permissions: Permission[]
|
||||
|
||||
static accessTokens = DbAccessTokensProvider.forModel(Admins)
|
||||
|
||||
async loadPermissions() {
|
||||
this.permissions = await Permission.query()
|
||||
.join('role_permissions', 'permissions.id', 'role_permissions.permission_id')
|
||||
.join('admin_roles', 'role_permissions.role_id', 'admin_roles.role_id')
|
||||
.where('admin_roles.admin_id', this.id)
|
||||
.exec()
|
||||
return this
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user