对应的英文名称
检测当前登录用户是否有改权限
/// <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、每个连接的操作都可控制--权限管理
资源列表 资源列表通过递归进行查询
每一个连接/资源
操作类型
角色列表
给相应的角色分配资源
给用户分配权限