feat(auth): integrate normalizePermissionKeys for consistent permission handling
- Updated auth, admin, and auth-guards routes to utilize normalizePermissionKeys for permissions. - Enhanced permission mapping to ensure legacy keys are correctly transformed to current catalog keys. - Improved overall permission validation and user access management across the application.
This commit is contained in:
@@ -6,7 +6,7 @@ import {
|
||||
type UserRow,
|
||||
} from '@authportal/db'
|
||||
import type { AppId, MeResponse } from '@authportal/shared'
|
||||
import { APP_IDS } from '@authportal/shared'
|
||||
import { APP_IDS, normalizePermissionKeys } from '@authportal/shared'
|
||||
|
||||
export type AuthUser = {
|
||||
id: string
|
||||
@@ -68,7 +68,9 @@ export function loadAuthUser(
|
||||
user: UserRow,
|
||||
): AuthUser {
|
||||
const apps = getUserApps(request.server.db, user.id)
|
||||
const permissions = getUserPermissions(request.server.db, user.id)
|
||||
const permissions = normalizePermissionKeys(
|
||||
getUserPermissions(request.server.db, user.id),
|
||||
)
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
|
||||
@@ -18,6 +18,7 @@ import {
|
||||
allPermissionKeys,
|
||||
appSwitcherConfigSchema,
|
||||
createUserRequestSchema,
|
||||
normalizePermissionKeys,
|
||||
patchUserRequestSchema,
|
||||
putUserAccessRequestSchema,
|
||||
type AdminUser,
|
||||
@@ -34,7 +35,7 @@ function mapUser(
|
||||
const apps = getUserApps(db, user.id).filter((a): a is AppId =>
|
||||
(APP_IDS as readonly string[]).includes(a),
|
||||
)
|
||||
const permissions = getUserPermissions(db, user.id)
|
||||
const permissions = normalizePermissionKeys(getUserPermissions(db, user.id))
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
@@ -93,12 +94,13 @@ export async function adminRoutes(app: FastifyInstance): Promise<void> {
|
||||
})
|
||||
}
|
||||
const data = parsed.data
|
||||
const permissions = normalizePermissionKeys(data.permissions)
|
||||
if (getUserByEmail(app.db, data.email)) {
|
||||
return reply.status(409).send({
|
||||
error: { code: 'CONFLICT', message: 'Email уже занят' },
|
||||
})
|
||||
}
|
||||
const accessError = validateAccess(data.apps, data.permissions)
|
||||
const accessError = validateAccess(data.apps, permissions)
|
||||
if (accessError) {
|
||||
return reply.status(400).send({
|
||||
error: { code: 'VALIDATION_ERROR', message: accessError },
|
||||
@@ -112,7 +114,7 @@ export async function adminRoutes(app: FastifyInstance): Promise<void> {
|
||||
passwordHash,
|
||||
isAdmin: data.is_admin,
|
||||
})
|
||||
setUserAccess(app.db, user.id, data.apps, data.permissions)
|
||||
setUserAccess(app.db, user.id, data.apps, permissions)
|
||||
return reply.status(201).send(mapUser(app.db, getUserById(app.db, user.id)!))
|
||||
})
|
||||
|
||||
@@ -190,10 +192,8 @@ export async function adminRoutes(app: FastifyInstance): Promise<void> {
|
||||
error: { code: 'NOT_FOUND', message: 'Пользователь не найден' },
|
||||
})
|
||||
}
|
||||
const accessError = validateAccess(
|
||||
parsed.data.apps,
|
||||
parsed.data.permissions,
|
||||
)
|
||||
const permissions = normalizePermissionKeys(parsed.data.permissions)
|
||||
const accessError = validateAccess(parsed.data.apps, permissions)
|
||||
if (accessError) {
|
||||
return reply.status(400).send({
|
||||
error: { code: 'VALIDATION_ERROR', message: accessError },
|
||||
@@ -203,7 +203,7 @@ export async function adminRoutes(app: FastifyInstance): Promise<void> {
|
||||
app.db,
|
||||
request.params.id,
|
||||
parsed.data.apps,
|
||||
parsed.data.permissions,
|
||||
permissions,
|
||||
)
|
||||
return mapUser(app.db, getUserById(app.db, request.params.id)!)
|
||||
},
|
||||
|
||||
@@ -5,6 +5,7 @@ import {
|
||||
PERMISSION_CATALOG,
|
||||
appsMetaFromSwitcher,
|
||||
loginRequestSchema,
|
||||
normalizePermissionKeys,
|
||||
type LoginResponse,
|
||||
} from '@authportal/shared'
|
||||
import {
|
||||
@@ -52,7 +53,9 @@ export async function authRoutes(app: FastifyInstance): Promise<void> {
|
||||
}
|
||||
|
||||
const apps = getUserApps(app.db, user.id)
|
||||
const permissions = getUserPermissions(app.db, user.id)
|
||||
const permissions = normalizePermissionKeys(
|
||||
getUserPermissions(app.db, user.id),
|
||||
)
|
||||
const me = toMe(user, apps, permissions)
|
||||
|
||||
const expiresAt = new Date(
|
||||
|
||||
Reference in New Issue
Block a user