基于声明的权限处理的最佳实践 [关闭]

Posted

技术标签:

【中文标题】基于声明的权限处理的最佳实践 [关闭]【英文标题】:Best practice for claims based permission handling [closed] 【发布时间】:2017-11-18 02:47:14 【问题描述】:

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

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

【问题讨论】:

伙计们,您能否重新考虑一下并暂停我的问题?我不明白要求最佳实践是如何基于意见的。而且BTW这个人物的其他问题不久前也有人问过,都没有被拒绝:***.com/questions/30960315/… 【参考方案1】:

在整个项目中,我将 Roles 设置为 [Flag] Enum,然后我可以在 Authorization Filters 中将其用作 [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
    

【讨论】:

这是一个非常优雅的解决方案,谢谢!

以上是关于基于声明的权限处理的最佳实践 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Android:在 Activity 中声明 View 组件的最佳实践是啥? [关闭]

在try或outside try中声明类对象?哪个是最佳实践[关闭]

最佳实践:应该避免双向关系吗? [关闭]

最佳用户角色权限数据库设计实践? [关闭]

最佳用户角色权限数据库设计实践? [关闭]

Android 6.0 运行时权限管理最佳实践