Reorganize app workspaces and align Admin architecture
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
import Admin from '#base_modules/Admin/model/admin'
|
||||
import { HttpContext } from '@adonisjs/core/http'
|
||||
import hash from '@adonisjs/core/services/hash'
|
||||
import { authLoginValidator } from '#base_modules/Auth/validators/auth_login_validator'
|
||||
import db from '@adonisjs/lucid/services/db'
|
||||
|
||||
export default class AuthController {
|
||||
async login({ request, response }: HttpContext) {
|
||||
const { email, password } = await request.validateUsing(authLoginValidator)
|
||||
const admin = await Admin.findBy('email', email)
|
||||
if (!admin) {
|
||||
return response.unauthorized({
|
||||
message: 'Invalid credentials.',
|
||||
})
|
||||
}
|
||||
|
||||
const verified = await hash.verify(admin.password, password)
|
||||
if (!verified) {
|
||||
return response.unauthorized({
|
||||
message: 'Invalid credentials.',
|
||||
})
|
||||
}
|
||||
|
||||
const token = await Admin.accessTokens.create(admin)
|
||||
|
||||
return response.ok({
|
||||
type: 'bearer',
|
||||
token: token.value?.release(),
|
||||
user: admin,
|
||||
})
|
||||
}
|
||||
|
||||
async logout({ auth }: HttpContext) {
|
||||
await auth.use('api').invalidateToken()
|
||||
return { message: 'Logged out' }
|
||||
}
|
||||
|
||||
async user({ response, auth }: HttpContext) {
|
||||
const user = await auth.use('api').user
|
||||
if (!user) return response.unauthorized()
|
||||
await user.load('roles')
|
||||
const roles = user.roles.map((role) => role.id)
|
||||
const permissions = await db
|
||||
.from('role_permissions')
|
||||
.whereIn('role_id', roles)
|
||||
.select('permission_slug')
|
||||
return response.ok({ user, permissions: permissions.map((perm) => perm.permission_slug) })
|
||||
}
|
||||
}
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
import { middleware } from '#start/kernel'
|
||||
import router from '@adonisjs/core/services/router'
|
||||
|
||||
const AuthController = () => import('#base_modules/Auth/controller/auth_controller')
|
||||
|
||||
router.post('/auth/login', [AuthController, 'login'])
|
||||
router.post('/auth/logout', [AuthController, 'logout']).use([middleware.auth()])
|
||||
router.get('/auth/user', [AuthController, 'user']).use([middleware.auth()])
|
||||
@@ -0,0 +1,8 @@
|
||||
import vine from '@vinejs/vine'
|
||||
|
||||
export const authLoginValidator = vine.compile(
|
||||
vine.object({
|
||||
email: vine.string().trim().email(),
|
||||
password: vine.string().trim().minLength(8),
|
||||
})
|
||||
)
|
||||
Reference in New Issue
Block a user