Security - Roles
Every ability in Eicrud is attached to a role. Roles are dynamically assigned to users via the property CrudUser->role
.
eicrud.roles.ts
import { CrudRole } from "@eicrud/core/config";
export const roles: CrudRole[] = [
{
name: 'admin',
isAdminRole: true,
canMock: true,
inherits: ['user']
},
{
name: 'user',
inherits: ['guest']
},
{
name: 'guest'
},
]
Roles must be registered in the config service.
@Injectable()
export class MyConfigService extends CrudConfigService {
constructor(...) {
...
this.addRoles(roles);
}
}
Authorization
Eicrud's authorization checks role ability from root to branches:
user.role
: defineAbility + check against request.user.role
->inherits[0]
: defineAbility + check against request.inherit
->inherits[0]
: defineAbility + check against request.inherit
->inherits[1]
- ...
user.role
->inherits[1]
- ...
The authorization stops going up the tree whenever a role passes the check, it also skips already-checked roles.
Note
This means cannot
rules from inherited roles have no effect if the child role passes the authorization check.
Guest Role
Your application needs a guest role to define unauthenticated users' abilities. It is set the config service's constructor and defaults as 'guest'
.