我有3个型号[User,Role和UserRole]
Use {ID [PK], Name, Email, Password, .....} Role {ID [PK], Name, Description, .......} UserRole {UserID [FK], RoleID [FK]}
考虑使用[Authorize]属性在控制器上进行基于角色的授权,指定用户必须具有管理员角色才能访问类中的任何控制器操作
[Authorize(Roles = "Administrator")]
public class PageController : Controller
{
// Controller code here
}
这很好,我需要的是,
有没有办法将我的角色集分配给[授权]属性?例如
我将从登录用户中获取已分配的角色并将其存储在列表中。是否可以将此列表分配给[授权]属性?如下所示:
[Authorize(Roles = MyDynamicallyLoadedList)]
public class PageController : Controller
{
// Controller code here
}
答案 0 :(得分:1)
嗯,有两个问题。
首先,您不能将List用作Attribute的参数。您可以使用数组。 http://msdn.microsoft.com/fr-fr/library/ms177221%28v=vs.100%29.aspx
其次,必须在编译时知道属性参数的值:列表的内容只能在运行时知道。
您会收到如下消息:
属性参数必须是常量表达式,typeof表达式 或属性参数类型
的数组创建表达式
解决方案是创建新的授权属性(继承自AuthorizeAttribute
),并覆盖AuthorizedCore
可以找到一个示例(您可以适应您的问题)here
答案 1 :(得分:1)
是。
GenericPrincipal
Thread.CurrentPrincipal
和HttpContext.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;
}
}