具有模型列表的基于角色的授权



我有三个模型[用户、角色和用户角色]

使用{ID[PK]、姓名、电子邮件、密码……}角色{ID[PK],名称,描述,…………}用户角色{UserID[FK],RoleID[FK]}

考虑控制器上基于角色的授权,使用[授权]属性指定用户必须处于管理员角色才能访问类中的任何控制器操作

[Authorize(Roles = "Administrator")]
public class PageController : Controller
{
    // Controller code here
}

这很好,我需要的是

有什么方法可以将我的角色集合分配给[授权]属性吗?例如

我将从已登录的用户中获取已分配的角色,并将其存储在列表中。是否可以将此列表分配给[授权]属性?如下所示:

[Authorize(Roles = MyDynamicallyLoadedList)]
public class PageController : Controller
{
    // Controller code here
}

好吧,有两个问题。

首先,不能将"列表"用作"属性"的参数。您可以改用数组。http://msdn.microsoft.com/fr-fr/library/ms177221%28v=vs.100%29.aspx

其次,attributes参数的值必须在编译时已知:您的列表的内容只有在运行时才知道。

你会收到这样的消息:

属性参数必须是常量表达式、typeof表达式或属性参数类型的数组创建表达式

解决方案是创建一个新的Authorization属性(继承自AuthorizeAttribute),并覆盖AuthorizedCore

一个例子(你可以适应你的问题)可以在这里找到

是。

  1. 覆盖global.asax中的PostAuthenticateRequest
  2. 从数据库加载角色
  3. 新建GenericPrincipal
  4. 将主体分配给Thread.CurrentPrincipalHttpContext.Current.User

示例:

protected void Application_OnPostAuthenticateRequest(object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        string[] rolelist = GetRoleListForUserFromAPI(User.Identity.Name);
        HttpContext.Current.User = new GenericPrincipal(User.Identity, rolelist);
        Thread.CurrentPrincipal = HttpContext.Current.User;
    }
}

相关内容

  • 没有找到相关文章

最新更新