基于声明的权限处理的最佳做法



在 C# Web API 项目中,我需要定义和检查粒度权限,例如"CanEditOrder"/"CanViewOrder"等。 目前我正在使用声明授权,因此,如果我想保持在 ASP.NET 标准范围内,我需要将这些权限设置为"迷你角色",以便通过 ApiController 上的授权属性检查它们。

这真的是处理粒度权限的推荐最佳做法,还是声明授权除了更通用的"角色"之外,还提供了另一种(更轻量级(方法来设置和检查粒度权限?

在整个项目中,我将角色设置为 [标志] 枚举,然后我可以在授权过滤器中使用它作为[Authorization(Roles.Admin, Roles.CanEdit, Roles.AnotherRolesFromAnotherProcess, ...)]

这是我当前项目中的角色示例

[Flags]
public enum Roles
{
    None = 0,
    ReadOnly = 1 << 0,
    ManageUsers = 1 << 1,
    // utilisateur restreint à voir ses propres bases.
    RestrictedBases = 1 << 2,
    // utilisateur pouvant voir toutes les bases.
    FullBases = 1 << 3,
    Prepaye = 1 << 4,
    AnalyseRSH = 1 << 5,
    // Admin à tous les roles non restrictif.
    Admin = ManageUsers | FullBases | Prepaye | AnalyseRSH
}

您可以看到角色混合了技术角色(用户可以查看所有角色或受限角色(或功能角色(用户是人力资源、计费经理等(。这非常易于使用,您可以根据客户的每个要求快速调整它。

除非受到限制,否则管理员显然拥有整个角色。

根据您的需要,您可以创建这样的东西:

    [Flags]
    public enum Roles
    {
        None = 0,
        HR = 1 << 0,
        Recuriter= 1 << 1,
        CanWrite = 1 << 2,
        CanRead = 1 << 3
        HRFull = HR | CanWrite | CanRead
    }

最新更新