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




    对应的英文名称


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

    /// <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、每个连接的操作都可控制--权限管理


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


     每一个连接/资源


    操作类型


    角色列表


    给相应的角色分配资源



    给用户分配权限

  • 相关阅读:
    Java反射实现几种方式
    kettle之几个.bat初步介绍
    eclipse 启动项目时候报的错误
    转:kettle中调度kitchen.bat后面接参数,写定时更新任务
    hibernate4,manytomany
    hibernate4,onetomany
    Javascript系列之在HTML中使用JavaScript
    Javascript系列之js简介
    004 C++ 指针
    003 C++ 函数
  • 原文地址:https://www.cnblogs.com/lovable/p/7122304.html
Copyright © 2020-2023  润新知