我知道简单的角色提供者,如果我需要限制特定的操作,我必须简单地编写Authorize(Roles ="Admin")或者如果我需要限制视图的特定部分,我会写@if(User.IsInRole("管理员")).
但我的问题是,如果我的角色没有修复并存储在数据库中,我的超级管理员可以编辑和删除它们.
我的要求是superadmin可以添加,更新,删除角色,还可以创建不同的用户并维护这些用户的角色.
我做了很多谷歌搜索,发现如下内容
[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; }
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,我可以使用此代码来授权操作方法如下
[CustomRole]
public ActionResult Details(int id = 0)
{
Employee employee = db.Employees.Find(id);
if (employee == null)
{
return HttpNotFound();
}
return View(employee);
}
Run Code Online (Sandbox Code Playgroud)
这里我的这个动作方法受到保护,但如果我想通过这个自定义方法保护视图的某些部分该怎么办.如何使用此功能实现User.IsInRole("Admin")的功能?