UDT-009: Overrides de PermisosJson por usuario — cierre módulo Auth #12
@@ -55,9 +55,9 @@ export function PermisosEditor({ userId }: PermisosEditorProps) {
|
|||||||
// Start all known codes as 'heredado'
|
// Start all known codes as 'heredado'
|
||||||
for (const c of permisoData.rolPermisos) map.set(c, 'heredado')
|
for (const c of permisoData.rolPermisos) map.set(c, 'heredado')
|
||||||
// Apply grant overrides
|
// Apply grant overrides
|
||||||
for (const c of permisoData.grant) map.set(c, 'concedido')
|
for (const c of permisoData.overrides.grant) map.set(c, 'concedido')
|
||||||
// Apply deny overrides
|
// Apply deny overrides
|
||||||
for (const c of permisoData.deny) map.set(c, 'denegado')
|
for (const c of permisoData.overrides.deny) map.set(c, 'denegado')
|
||||||
setStates(map)
|
setStates(map)
|
||||||
setSaveError(null)
|
setSaveError(null)
|
||||||
}, [permisoData])
|
}, [permisoData])
|
||||||
@@ -79,8 +79,8 @@ export function PermisosEditor({ userId }: PermisosEditorProps) {
|
|||||||
// Filter catalog to only show permisos that appear in rolPermisos, grant, deny, or all catalog
|
// Filter catalog to only show permisos that appear in rolPermisos, grant, deny, or all catalog
|
||||||
const allCodes = new Set([
|
const allCodes = new Set([
|
||||||
...permisoData.rolPermisos,
|
...permisoData.rolPermisos,
|
||||||
...permisoData.grant,
|
...permisoData.overrides.grant,
|
||||||
...permisoData.deny,
|
...permisoData.overrides.deny,
|
||||||
])
|
])
|
||||||
|
|
||||||
// Use catalog for grouping and names, showing all permisos known plus any from overrides
|
// Use catalog for grouping and names, showing all permisos known plus any from overrides
|
||||||
|
|||||||
@@ -50,11 +50,11 @@ export interface UpdateUserPayload {
|
|||||||
// UDT-009 — Permisos overrides per-user types
|
// UDT-009 — Permisos overrides per-user types
|
||||||
|
|
||||||
export interface UsuarioPermisos {
|
export interface UsuarioPermisos {
|
||||||
usuarioId: number
|
|
||||||
rol: string
|
|
||||||
rolPermisos: string[]
|
rolPermisos: string[]
|
||||||
grant: string[]
|
overrides: {
|
||||||
deny: string[]
|
grant: string[]
|
||||||
|
deny: string[]
|
||||||
|
}
|
||||||
effective: string[]
|
effective: string[]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,11 +18,11 @@ const catalogoPermisos = [
|
|||||||
|
|
||||||
// User permisos — from /api/v1/users/42/permisos
|
// User permisos — from /api/v1/users/42/permisos
|
||||||
const mockUsuarioPermisos = {
|
const mockUsuarioPermisos = {
|
||||||
usuarioId: 42,
|
|
||||||
rol: 'cajero',
|
|
||||||
rolPermisos: ['ventas:contado:crear', 'ventas:contado:cobrar'],
|
rolPermisos: ['ventas:contado:crear', 'ventas:contado:cobrar'],
|
||||||
grant: ['textos:editar'],
|
overrides: {
|
||||||
deny: ['ventas:contado:cobrar'],
|
grant: ['textos:editar'],
|
||||||
|
deny: ['ventas:contado:cobrar'],
|
||||||
|
},
|
||||||
effective: ['ventas:contado:crear', 'textos:editar'],
|
effective: ['ventas:contado:crear', 'textos:editar'],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,11 +6,11 @@ import { getUserPermisos } from '../../../features/users/api/getUserPermisos'
|
|||||||
const API_URL = 'http://localhost:5000'
|
const API_URL = 'http://localhost:5000'
|
||||||
|
|
||||||
const mockUsuarioPermisos = {
|
const mockUsuarioPermisos = {
|
||||||
usuarioId: 42,
|
|
||||||
rol: 'cajero',
|
|
||||||
rolPermisos: ['ventas:contado:crear', 'ventas:contado:cobrar'],
|
rolPermisos: ['ventas:contado:crear', 'ventas:contado:cobrar'],
|
||||||
grant: ['textos:editar'],
|
overrides: {
|
||||||
deny: ['ventas:contado:cobrar'],
|
grant: ['textos:editar'],
|
||||||
|
deny: ['ventas:contado:cobrar'],
|
||||||
|
},
|
||||||
effective: ['ventas:contado:crear', 'textos:editar'],
|
effective: ['ventas:contado:crear', 'textos:editar'],
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,11 +30,9 @@ describe('getUserPermisos api client', () => {
|
|||||||
|
|
||||||
const result = await getUserPermisos(42)
|
const result = await getUserPermisos(42)
|
||||||
|
|
||||||
expect(result.usuarioId).toBe(42)
|
|
||||||
expect(result.rol).toBe('cajero')
|
|
||||||
expect(result.rolPermisos).toEqual(['ventas:contado:crear', 'ventas:contado:cobrar'])
|
expect(result.rolPermisos).toEqual(['ventas:contado:crear', 'ventas:contado:cobrar'])
|
||||||
expect(result.grant).toEqual(['textos:editar'])
|
expect(result.overrides.grant).toEqual(['textos:editar'])
|
||||||
expect(result.deny).toEqual(['ventas:contado:cobrar'])
|
expect(result.overrides.deny).toEqual(['ventas:contado:cobrar'])
|
||||||
expect(result.effective).toEqual(['ventas:contado:crear', 'textos:editar'])
|
expect(result.effective).toEqual(['ventas:contado:crear', 'textos:editar'])
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user