更新
好的,所以我有基本表:
所以我将我的问题编辑成简单版本,我想检查当前管理员是否在数据库中分配了特权..
示例控制器:
public ActionResult CreateAdmin()
{
//get Admin Session ID
var getAdmin = db.ms_admin
.Include(s => s.ms_admin_priviledge)
.Where(s => s.ID.ToString() == User.Identity.Name.ToString());
//there error in the if...
if(getAdmin.ms_admin_privilege.admin_privilege.Contains("privilege1"))
{
//do something
}
else(getAdmin.ms_admin_privilege.admin_privilege.Contains("privilege2"))
{
//do another one
}
// bla bla
}
我并不熟悉实体框架中的多对多关系...
非常感谢
答案 0 :(得分:0)
从数据库获取管理员权限列表,例如从admin_has_privilege选择admin_privilege_id,其中ID =管理员ID
public ActionResult CreateAdmin()
{
var current_admin_id = //Admin Session ID
List<int> lstadmin_privilege_id =new List<int> ();
//set lstadmin_privilege_id from database values
if (! lstadmin_privilege_id.Contains(**your_required_privilege_id**))
{
return RedirectToAction("login")//here you forgot to write return Keyword
}
}
答案 1 :(得分:0)
是的,您接近的方式是正确的 if if(您可以使用任意数量的条件),如下所示:
public ActionResult CreateAdmin()
{
var current_admin_id = //Admin Session ID
if(//current admin don't have the necessary privilege to enter this controller//)
{
return RedirectToAction("login")//here you forgot to write return Keyword
}
else if(...){...}
else if(...){...}
else
{
return View();
}
}
答案 2 :(得分:0)
我之前遇到了同样的问题,我解决了以下问题。
首先创建一个类,如下所示
public class HasPermission : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool baseAuthorized = base.AuthorizeCore(httpContext);
if (!baseAuthorized)
{
return false;
}
//Your code here
if (!hasPermission)
{
return false;
}
//Your code ends here
return true;
}
}
现在在下面的任何方法上使用它
[HasPermission]
public ActionResult Index()
{
return View();
}