LgAuthorizeView & LgCascadingPolicies
Deux composants pilotent les autorisations dans l'interface :
LgAuthorizeViewconditionne l'affichage (PolicyVisible) et l'édition (PolicyEdit) de son contenu à des policies, et propage ces policies en cascade aux composants Lagoon enfants ;LgCascadingPoliciesdéclare des policies toujours validées dans son sous-arbre, ce qui évite de réévaluer les droits composant par composant.
Les policies elles-mêmes sont déclarées côté serveur — voir Rôles et policies.
<LgAuthorizeView PolicyVisible="@Policies.IsAdmin">
...
</LgAuthorizeView>
- Espace de noms :
Lagoon.UI.Components - Hérite de :
ComponentBase(tous les deux) - Interfaces :
ILgComponentPolicies(LgAuthorizeView) ;IComponentContextProvider(LgCascadingPolicies) - Package NuGet :
Lagoon.UI
Utilisation
Masquer une zone selon une policy
Le contenu de LgAuthorizeView n'est rendu que si l'utilisateur satisfait
PolicyVisible. NotAuthorized fournit un contenu de remplacement et
Authorizing un contenu d'attente pendant l'évaluation asynchrone des
droits.
<LgAuthorizeView PolicyVisible="@Policies.IsAdmin">
<ChildContent>
<LgTitle Text="#Administration" TitleLevel="TitleLevel.Level2" />
<LgButton Text="#PurgeData" OnClick="PurgeAsync" />
</ChildContent>
<NotAuthorized>
<LgBigMessage Title="#AccessDenied" />
</NotAuthorized>
</LgAuthorizeView>
public partial class AdminSectionPage : LgPage
{
// Action réservée aux administrateurs : la zone entière est masquée sans la policy.
private async Task PurgeAsync(ActionEventArgs args)
{
await Task.Delay(100, args.CancellationToken);
ShowSuccess("#DataPurged");
}
}
Authorized est équivalent à ChildContent (avec l'état d'authentification
en contexte) — ne définissez pas les deux, une exception serait levée.
Rendre une zone non éditable
PolicyEdit laisse le contenu visible mais le rend non éditable si la
policy n'est pas satisfaite : les champs Lagoon enfants (qui consomment le
paramètre en cascade ParentAuthorizeView) passent en lecture seule.
<LgAuthorizeView PolicyEdit="@Policies.CanEditOrders">
<LgTextBox Label="#Reference" @bind-Value="_model.Reference" />
<LgDateBox Label="#OrderDate" @bind-Value="_model.OrderDate" />
</LgAuthorizeView>
public partial class OrderFormPage : LgPage
{
private readonly OrderVm _model = new();
private sealed class OrderVm
{
public string Reference { get; set; }
public DateTime? OrderDate { get; set; }
}
}
Les composants Lagoon exposent aussi PolicyVisible / PolicyEdit
individuellement (ex. LgButton) :
LgAuthorizeView sert à factoriser la règle sur une zone entière.
Conteneur de rendu
Par défaut, le contenu autorisé est rendu sans élément englobant, sauf si
CssClass est défini. ShowDiv force (ou interdit) l'encapsulation dans un
<div>.
<LgAuthorizeView PolicyVisible="@Policies.SeeStatistics" CssClass="dashboard-stats">
...
</LgAuthorizeView>
Propager des policies validées avec LgCascadingPolicies
LgCascadingPolicies marque des policies comme déjà validées pour tout
son sous-arbre : les composants enfants qui exigent l'une de ces policies
(via PolicyVisible / PolicyEdit) les considèrent satisfaites sans
réévaluation. C'est utile quand un écran a déjà vérifié le droit en amont,
ou pour des rendus répétés (lignes de grille, listes).
<LgCascadingPolicies ValidatedPolicies="@_validatedPolicies">
@foreach (TaskVm task in _tasks)
{
<LgButton Text="@task.Name" PolicyEdit="@Policies.CanEditTasks" />
}
</LgCascadingPolicies>
public partial class ProjectPage : LgPage
{
// Policies déjà vérifiées à l'entrée de l'écran : évite une réévaluation par bouton.
private string _validatedPolicies = Policies.CanEditTasks;
private readonly List<TaskVm> _tasks = new();
private sealed class TaskVm
{
public string Name { get; set; }
}
}
La méthode AuthorizeAsync(policyName) (via @ref) vérifie une policy dans
le contexte du composant.
Propriétés
Toutes les propriétés [Parameter] des deux composants.
LgAuthorizeView
| Nom | Type | Défaut | Déclaré dans | Description |
|---|---|---|---|---|
Authorized | RenderFragment<AuthenticationState> | null | LgAuthorizeView | Contenu affiché si l'utilisateur est autorisé. Incompatible avec ChildContent. |
Authorizing | RenderFragment | null | LgAuthorizeView | Contenu affiché pendant l'évaluation asynchrone des droits. |
ChildContent | RenderFragment | null | LgAuthorizeView | Contenu affiché si l'utilisateur est autorisé. |
CssClass | string | null | LgAuthorizeView | Classes CSS du <div> englobant (sa présence active l'encapsulation). |
NotAuthorized | RenderFragment<AuthenticationState> | null | LgAuthorizeView | Contenu affiché si l'utilisateur n'est pas autorisé. |
PolicyEdit | string | null | LgAuthorizeView | Policy requise pour éditer le contenu ; sinon les composants enfants passent en lecture seule. |
PolicyVisible | string | null | LgAuthorizeView | Policy requise pour afficher le contenu. |
ShowDiv | bool? | null | LgAuthorizeView | Force (true) ou interdit (false) l'encapsulation dans un <div>. Si null, un <div> n'est rendu que si CssClass est défini. |
LgCascadingPolicies
| Nom | Type | Défaut | Déclaré dans | Description |
|---|---|---|---|---|
ChildContent | RenderFragment | null | LgCascadingPolicies | Contenu du sous-arbre bénéficiant des policies validées. |
ValidatedPolicies | string | null | LgCascadingPolicies | Policies considérées comme toujours validées dans le sous-arbre. |
Méthodes & événements
| Membre | Signature | Description |
|---|---|---|
LgCascadingPolicies.AuthorizeAsync | Task<bool> AuthorizeAsync(string policyName) | Vérifie si l'utilisateur satisfait la policy dans le contexte du composant. |
Bonnes pratiques / accessibilité
- Déclarez les noms de policies dans une classe partagée client/serveur
(
Policies.XXX) plutôt qu'en chaînes littérales. - Le masquage côté client est un confort d'interface, pas une protection :
les contrôleurs doivent porter leurs propres attributs
[Authorize]— voir Rôles et policies. - Utilisez
LgCascadingPoliciespour les zones à rendu répété : chaque évaluation de policy évitée est un aller-retour de moins vers le contexte d'autorisation.
Tous les paramètres : Référence API — LgAuthorizeView et Référence API — LgCascadingPolicies.
Composants liés
LgButton—PolicyVisible/PolicyEditau niveau d'un composant.LgEditForm— formulaire dont les champs héritent des policies en cascade.