权限管理(一个管理员多一个角色)--初期- 待完善



对应的英文名称


 检测当前登录用户是否有改权限

/// <summary>
/// 判断管理员是否已经登录(解决Session超时问题)
/// </summary>
public bool IsAdminLogin()
{
   //如果Session为Null
    if (Session["user"] != null)
    {
        return true;
     }
     else
      {
         return false;
      }
}
判断管理员是否登录
/// <summary>
/// 获取管理员信息
/// </summary>
public S_PUSERS GetAdminInfo()
{
   if (IsAdminLogin())
      {
          S_PUSERS model = Session["user"] as S_PUSERS;
          if (model != null)
          {
                return model;
           }
        }
        return null;
}
获取管理员信息
/// <summary>
/// 权限检查
/// </summary>
/// <param name="url">链接地址//这里并用不上</param>
/// <param name="action_type">权限类型(Add,Edit,Del。。。)</param>
/// <param name="roleid">资源id</param>
/// <returns></returns>
 public bool ChkAdmdinLevel(string url, string action_type, decimal roleid)
{
     //创建用户实例
      S_PUSERS model = new S_PUSERS();
      using (LsTransEntities data = new LsTransEntities())
       {
               //创建是否有这个权限的标杆
                bool flo = false;
                //判断用户是否登录
                if (IsAdminLogin())
                {
                    //获取当前用户信息
                    model = GetAdminInfo();
                    if (model.USERNAME != "Admin")
                    {
                        //逻辑代码                    
                        //找到相应的资源信息S_MRoleList
                        S_MROLELIST rol = data.S_MROLELIST.FirstOrDefault(x => x.ID == roleid);
                        if (rol != null)
                        {
                            //查询得到相应的角色id
                            //S_Mmanagerrolevalue  可能有多个角色
                            var list = data.S_MMANAGERROLEVALUE.Where(x => x.ID == rol.ID);

                            //查询得到用户的管理员id //S_PManager
                            S_PMANAGER man = data.S_PMANAGER.FirstOrDefault(x => x.USERID == model.USERID);
                            if (man != null)
                            {
                                //找到对应的所有角色id //S_MRoleValue
                                var li = data.S_MROLEVALUE.Where(x => x.MANAGERID == man.MANAGERID);
                                if (li != null)
                                {
                                    foreach (var item in li)
                                    {
                                        if (list.FirstOrDefault(x => x.ROLEID == item.ROLEID && x.ACTIONTYPE.Contains(action_type)) != null)
                                        {
                                            flo = true;
                                            return flo;
                                        }
                                        else
                                        {
                                            flo = false;
                                        }
                                    }
                                }
                                else
                              {

                                  flo = false;
                               }
                          }
                          else
                          {
                              flo = false;
                          }


                      }
                  }
                  else
                  {
                      return true;
                  }
             }
             if (!flo)
             {
                    //避免当一直弹出不能进入该权限
                   if (Session["error"] != null)
                   {
                    Session["error"] = Convert.ToInt32(Session["error"]) + 1;

                   if (Convert.ToInt32(Session["error"]) == 2)
                  {
                      Session["url"] = "/Manager/Login.aspx";
                  }
            }
            else
           {
               Session["error"] = 1;
           }
        }
                return flo;
     }
}
判断用户是否有权限访问

调用方法

//判断该用户是否有相应的访问权限
//HttpContext.Current.Request.Url.AbsolutePath.ToString()  获取当前连接地址
//parent.parent.location.href 由于使用if  所以这样写才能在父页面弹出对话框
//访问连接地址:如   http://localhost:33/test.aspx?type=View&roleid=352
public decimal projId, roleid;
protected void Page_Load(object sender, EventArgs e)
{
  decimal.TryParse(Request["roleid"], out roleid);
  if (!ChkAdmdinLevel(HttpContext.Current.Request.Url.AbsolutePath.ToString(), Request["type"], roleid))
  {
  Response.Write("<script>alert('您没有管理该页面的权限或登录过期,请勿非法进入!'); parent.parent.location.href ='" + Session["url"] + "'; </script>");
  return;
  }
}

 最终达到效果

1、后台菜单动态化 通过后台可直接管理

2、每个连接的操作都可控制--权限管理


资源列表  资源列表通过递归进行查询


 每一个连接/资源


操作类型


角色列表


给相应的角色分配资源



给用户分配权限

原文地址:https://www.cnblogs.com/lovable/p/7122304.html