繁体   English   中英

如何在剃须刀mvc的AuthorizeAttribute中使用枚举?

[英]How to use enum in AuthorizeAttribute the razor mvc?

我有这个枚举:

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

我想将其传递给我的“授权”角色

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

有某种方法可以做到吗?

角色必须是常量表达式,例如字符串。 最简单的方法是使用余弦。

public static class PerfilUsuario
{
   public const string AdministradorLoja = "AdministradorLoja";
   public const string Gerente = "NaviGerentegators";
}

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

好问题。 这是我做的...

我决定将权限数据库驱动为驱动器,因此我需要一种将字符串转换为“类型化”的方法,以便获得编译时警告,还可以更改数据库中的权限名称,而不必更新所有权限我们的生产代码。 由于属性是基于字符串的(所谓的魔术字符串),因此我决定不进行枚举,而是使用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)]

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

到目前为止,这确实非常有效,并且使我能够使产品所有者能够在数据库中编辑权限名称,描述等,而无需开发人员参与。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM