|
Nabû 1.0.0
Standardizing .NET developments with abstractions
|
title: Définir des droits et des rôles summary: Créer des droits globaux (Right) et sur une ressource (RightOn<T>), les regrouper en rôles (Role, RoleOn<T>), et remplir les rôles avec RoleFactory et IRightsFactory<TRole>. symbols: [IHumbabaAuthorize, Right, RightOn1, RightOn1.ResourceValue, Role, Role.Rights, Role.UpdateRights, RoleOn1, RoleFactory, RoleFactory.MakeRole, IRightsFactory1, IRightsFactory`1.GetRights]
Un droit dérive de Right (global) ou de RightOn<T> (sur une ressource de type T, identifiée par une chaîne dans ResourceValue). Les deux méthodes Instantiate sont abstraites : Instantiate(string?) doit reporter la ressource, c'est elle qu'appellent le service et les attributs pour fabriquer l'exigence.
Deux droits se correspondent si IdentityName, ResourceTypeIdentity et ResourceValueIdentity sont égaux (comparaison exacte). DisplayName (nom court de la classe) sert à l'affichage ; IdentityName, DisplayName, ResourceTypeIdentity, ResourceValueIdentity et Authorize sont virtual.
Un rôle regroupe des droits dans Rights ; Authorize(exigence) réussit si l'un de ses droits l'accorde. On pose les droits dans le constructeur, ou on les reçoit par UpdateRights.
RoleOn<T> mémorise une ressource (ResourceValueIdentity, posée par UpdateRights), mais elle n'est pas utilisée dans la vérification : ce sont les droits du rôle qui doivent porter la ressource.
RoleFactory.MakeRole<TRole>(ressource) crée TRole (constructeur sans paramètre), résout un IRightsFactory<TRole> dans un scope DI et appelle UpdateRights(await GetRights(ressource), ressource). Sans fabrique enregistrée, le rôle garde les droits de son constructeur. MakeRole(Type, string?) fait la même chose à partir d'un type (par réflexion).
RoleFactory et IRightsFactory<T> sont marqués [HumbabaService(ServiceLifetime.Transient)] : ils sont pris en compte par la découverte Anum.Ioc via DiscoverHumbabaServices(). RoleFactory peut aussi être enregistré à la main (services.AddTransient<RoleFactory>()).