基于声明的权限处理的最佳实践

时间:2017-06-15 14:38:33

标签: c# security claims-based-identity

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

这是否是处理细化权限的推荐最佳做法,或者声明授权是否提供了另一种(更轻量级)方法来设置和检查细化权限,而不是更常见的角色"?

1 个答案:

答案 0 :(得分:3)

在整个项目中,我将角色设置为[Flag] Enum,然后我可以在授权过滤器中将其用作[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
}

您可以看到角色混合技术角色(用户可以看到所有或受限制的)或功能角色(用户是HR,计费管理员......)。这非常容易使用,您可以根据客户的每一个要求快速调整它。

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

根据您的需要,您可以创建以下内容:

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

        HRFull = HR | CanWrite | CanRead
    }