權限管理(一個管理員多一個角色)--初期- 待完善
阿新 • • 發佈:2017-07-05
level span ati url manage decimal mdi login als
對應的英文名稱
檢測當前登錄用戶是否有改權限
/// <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 = newS_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、每個連接的操作都可控制--權限管理
資源列表 資源列表通過遞歸進行查詢
每一個連接/資源
操作類型
角色列表
給相應的角色分配資源
給用戶分配權限
權限管理(一個管理員多一個角色)--初期- 待完善