【问题标题】:AuthorizeAttribute Reuse授权属性重用
【发布时间】:2012-04-03 15:40:50
【问题描述】:

我正在使用AuthorizeAttributes 保护我的 MVC 控制器。有没有办法自己实例化这些类?

目前我有一个 AuthorizedAdmin 和一个 IsAdmin 类,它们的作用相同。所以理想情况下IsAdmin 应该使用AuthorizedAdmin 类。有没有办法做到这一点?

我问是因为AuthorizedAdmin 真的很简单:

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)]
public class AuthorizedAdmin : AuthorizeAttribute
{
    public AuthorizedAdmin()
    {
        Users = ConfigurationManager.AppSettings["ADMIN_USERS"];
        Roles = ConfigurationManager.AppSettings["ADMIN_GROUPS"];
    }
}

另一方面,IsAdmin 类更复杂且功能重复。

谢谢

【问题讨论】:

    标签: c# asp.net-mvc-3 code-reuse authorize-attribute


    【解决方案1】:

    为什么需要IsAdmin?为什么不只使用一个名为 GetAdminRole() 的方法从您的 AppSettings 返回角色字符串,然后使用 User.IsInRole(GetAdminRole())

    然后您也可以在您的AuthorizedAdminAttribute 中使用GetAdminRole()

    【讨论】:

    • IsAdmin 还有一个用户列表要处理..users.Split(',').MatchUser...。嗯..但我想你的提示..即使是用户的东西也可能不错.. thx
    【解决方案2】:

    当然,您可以实例化AuthorizeAdmin 并在其上调用OnAuthorization。不过,使用AuthorizationContext 会很麻烦。为什么不翻转它...将您的业务逻辑放入 IsAdmin 并让 AuthorizedAdmin 使用它?

    【讨论】:

    • 是的,也许最好不要强求。我不希望这样的原因是 AuthorizedAdmin 代码非常简单。不想删除它:) 或用更复杂的代码替换它...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-28
    • 2011-07-18
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    相关资源
    最近更新 更多