【发布时间】:2014-07-22 04:31:44
【问题描述】:
我知道简单的角色提供者,如果我需要限制特定的操作,我必须简单地编写 Authorize(Roles = "Admin") 或者如果我需要限制视图的特定部分,我需要编写 @if(User. IsInRole(“管理员”))。
但我的问题是,如果我的角色不固定并且存储在数据库中并且我的超级管理员可以编辑和删除它们怎么办。
我的要求是超级管理员可以添加、更新、删除角色,还可以创建不同的用户并维护这些用户的角色。
我做了很多谷歌搜索,发现如下内容
[AttributeUsage (AttributeTargets.Method|AttributeTargets.Class,Inherited = true,AllowMultiple=true) ]
public class CustomRole : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase context)
{
Respository db = new Respository();
if (db.UserMasters.Where(x => x.user_name == context.User.Identity.Name).Count() > 0)
{
return true;
}
else { return false; }
}
}
这里我可以使用这个代码来授权动作方法如下
[CustomRole]
public ActionResult Details(int id = 0)
{
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
return View(employee);
}
这里我的这个操作方法是受保护的,但是如果我想通过这个自定义方法保护视图的某些部分怎么办。如何使用这个功能来实现作为 User.IsInRole("Admin") 的功能?
【问题讨论】:
-
如果您的角色未预定义,您希望如何针对它们编写代码?您是否希望管理员将哪些部分可见为可配置选项?
-
是的,exactly.admin 将决定哪个模块对哪个用户角色可见。我的应用程序中现在共有三个模块。
标签: asp.net asp.net-mvc-3 asp.net-mvc-4 razor asp.net-mvc-5