Visão geral
createRules em src/resources/permissions.ts deriva regras de tipo_usuario_id. Fonte passa a ser rules da API. O Manager precisa aplicar conditions (hoje o tipo tem o campo e o builder.can ignora).
Fora de escopo
- Tela para editar permissões
- Implementar
/auth na API
- Novos tipos de usuário
Critérios de aceite
Detalhes técnicos
new Manager({ rules: response.rules })
Em src/libraries/auth/Manager.ts:
builder.can(action, resource, rule.conditions)
can(action, resource, record?) com subject(resource, record) encapsulado
AuthProvider deixa de chamar createRules(attributes?.user). createRules local só fallback no dual-run, depois apagar.
UI já usa auth.can('read', 'Usuario') etc. em App.tsx e navItems.tsx — deve continuar se as rules da API tiverem os mesmos resource/action.
Hoje (Manager.ts) — não copiar o can sem conditions:
builder.can(action, resource) // incompleto
Alvo:
builder.can(action, resource, rule.conditions)
can(action, resource, record?: object) {
if (record) return this.ability.can(action, subject(resource, record))
return this.ability.can(action, resource)
}
AuthProvider:
const manager = useMemo(
() => new Manager({ rules: attributes?.rules ?? [] }),
[attributes?.rules],
)
Visão geral
createRulesemsrc/resources/permissions.tsderiva regras detipo_usuario_id. Fonte passa a serrulesda API. OManagerprecisa aplicarconditions(hoje o tipo tem o campo e obuilder.canignora).Fora de escopo
/authna APICritérios de aceite
auth.canusamrulesda sessãocan(action, resource, record?)avalia conditionDetalhes técnicos
Em
src/libraries/auth/Manager.ts:builder.can(action, resource, rule.conditions)can(action, resource, record?)comsubject(resource, record)encapsuladoAuthProviderdeixa de chamarcreateRules(attributes?.user).createRuleslocal só fallback no dual-run, depois apagar.UI já usa
auth.can('read', 'Usuario')etc. emApp.tsxenavItems.tsx— deve continuar se asrulesda API tiverem os mesmosresource/action.Hoje (
Manager.ts) — não copiar ocansem conditions:Alvo:
AuthProvider: