【问题标题】:How to use enum in AuthorizeAttribute the razor mvc?如何在AuthorizeAttribute中使用枚举剃须刀mvc?
【发布时间】:2023-03-14 21:44:01
【问题描述】:

我有这个枚举:

public enum PerfilUsuarioEnum
{
    AdministradorSistema = 1,
    AdministradorLoja = 2,
    Gerente = 3
}

我想将它传递给我的授权角色

[Authorize(Roles = PerfilUsuarioEnum.AdministradorLoja + ", " + PerfilUsuarioEnum.Gerente)]

有什么方法可以做到这一点?

【问题讨论】:

    标签: c# asp.net .net asp.net-mvc razor


    【解决方案1】:

    Roles 必须是字符串等常量表达式。最简单的方法是使用余弦。

    public static class PerfilUsuario
    {
       public const string AdministradorLoja = "AdministradorLoja";
       public const string Gerente = "NaviGerentegators";
    }
    
    [Authorize(Roles = PerfilUsuario.AdministradorLoja + ", " +
         PerfilUsuario.Gerente)]
    

    【讨论】:

    • 有什么方法可以使用枚举?
    • 对不起,没有别的办法。在这种情况下,常量与 Enum 非常相似。
    【解决方案2】:

    很好的问题。这就是我所做的......

    我决定让我的权限数据库驱动,所以我需要一种方法将字符串转换为“类型化”的东西,这样我就可以获得编译时警告,而且我可以更改数据库中权限的名称,而不必更新我们所有的生产代码。由于属性是基于字符串的(所谓的魔术字符串),我决定不使用枚举,并使用 T4 脚本读取数据库并为每条记录生成一个结构。这让我还可以添加诸如漂亮的显示名称、有关权限的详细信息以及可以向用户显示的错误消息。

    这是 T4 模板运行后的示例权限行。

    public struct CanViewClaimData
    {
        // Using const allows the compiler to generate the values in the assembly at compile time and satisfy MVC Authorize Attribute requirements for const strings.
        public const System.String Name = "CanViewClaimData";
        public const System.String DisplayName = "Can View Claim Data";
        public const System.String Description = "The allows users to view claim data";
        public const System.String DefaultErrorMessage = "You must have the \"Can View Claim Data\" permission to access this feature.";
    
    }
    

    然后在代码中我使用子类 Authorize 并将 Action 标记为这样,

    [Security.AuthorizedAttribute(Roles = CanViewClaimData.Name, Message = CanViewClaimData.DefaultErrorMessage)]
    

    然后在每次自动构建期间推送到我们的 C.I.环境中,我将 T4 模板作为构建过程的一部分运行,以使结构字符串与数据库保持同步。

    到目前为止,这非常有效,让我能够让我们的产品负责人在数据库中编辑权限名称、描述等,而无需开发人员参与。

    【讨论】:

      猜你喜欢
      • 2015-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-23
      相关资源
      最近更新 更多