多对多关系检查数据是否存在

时间:2014-09-16 04:54:34

标签: asp.net-mvc entity-framework many-to-many

更新

好的,所以我有基本表: enter image description here

所以我将我的问题编辑成简单版本,我想检查当前管理员是否在数据库中分配了特权..

示例控制器:

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
}

我并不熟悉实体框架中的多对多关系...

非常感谢

3 个答案:

答案 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();
   }
}

注意: - 您还可以使用自定义操作过滤器来了解有关自定义过滤器的更多信息 herehere以及{{ 3}}

答案 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(); }