從這篇文章,希望您能夠了解吉日嘎拉通用權限管理系統菜單項配置、緩存及在前台的展示技巧。
項目中使用了吉日嘎拉的通用權限管理系統,幾十個子系統均由該權限管理系統管理。
在系統中配置好相關菜單及非菜單項,配置截圖:
菜單權限設置截圖
通過下拉菜單進入其中的一個子系統
子系統中的菜單項(菜單項表示該項會在前端需要展示出來,用於用戶點擊的項目),其中的公開表示所有人均可看到該菜單項目。
子系統中的非菜單項(非菜單項表示該項目不需要在前端展示出來,比如有些在頁面中的彈出窗口、按鈕等項目)
通過單點登錄到子系統以後,通過一個服務獲取登錄用戶擁有的全部菜單,在權限基類頁實現,所有需要進行權限判斷的頁面均集成此基類頁。
代碼實現如下圖:AuthBasePage.cs基類頁,可參考編寫基類頁
public class AuthBasePage : BasePage { /// <summary> /// 所有的權限菜單:包含菜單項、非菜單項(如程序中的彈出頁、按鈕等) /// </summary> protected string menuHtml = string.Empty; /// <summary> /// 獲取所有菜單的方法 用緩存 /// 通過userInfo.OpenId來更新緩存 每次進入會重新獲取一次菜單, /// </summary> /// <param name="userInfo"></param> /// <returns></returns> private string GetmenuHtml(BaseUserInfo userInfo, bool refreshFlag = false) { string cacheKey = "menuHtml_" + userInfo.OpenId; if (refreshFlag) { HttpContext.Current.Cache.Remove(cacheKey); } if (HttpContext.Current.Cache[cacheKey] == null) { lock (this) { if (HttpContext.Current.Cache[cacheKey] == null) { PermissionServiceSoapClient service = new PermissionServiceSoapClient(); string systemCode = ZTOTransferFees.Foundation.ConfigHelper.GetConfigString("SystemCode"); menuHtml = service.GetPermissionListByUser(systemCode, userInfo.Id); menuHtml = menuHtml.Replace("Id", "id").Replace("FullName", "name").Replace("NavigateUrl", "tabUrl").Replace("Parentid", "parentId").Replace( "ImagUrl", "icon").Replace("\"Expand\":1", "open:true"); HttpContext.Current.Cache.Add(cacheKey, menuHtml, null, DateTime.Now.AddMinutes(120), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, null); } } } return HttpContext.Current.Cache[cacheKey] as string; } protected override void OnInit(EventArgs e) { //判斷是否得到身份認證 未認證或超時時彈出登錄窗口而非跳轉到登錄頁 if (null == HttpContext.Current.User.Identity || !HttpContext.Current.User.Identity.IsAuthenticated) { Response.Write("<script type=\"text/javascript\">"); Response.Write("var topWin = (function (p, c) {while (p != c) {c = p;p = p.parent}return c;})(window.parent, window);"); Response.Write("try{ topWin.openLoginWindow();}catch(e){window.location='/Login.aspx'}"); Response.Write("</script>"); Response.End(); } HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName]; FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value); userData = authTicket.UserData; JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer(); userInfo = javaScriptSerializer.Deserialize<BaseUserInfo>(userData); userInfo.ServiceUserName = BaseSystemInfo.ServiceUserName; userInfo.ServicePassword = BaseSystemInfo.ServicePassword; //獲得全部菜單項、非菜單項的字符串(json)字符串 menuHtml = GetmenuHtml(userInfo); //正在訪問的頁面,通過判斷該頁面是否在menuHtml中來進行權限判斷,按鈕等也一樣 string curUrl = HttpContext.Current.Request.FilePath; if (!menuHtml.Contains(curUrl)) { //權限管理員的聯系方式 string authManagerInfo = ZTOTransferFees.Foundation.ConfigHelper.GetConfigString("authManagerInfo"); HttpContext.Current.Items["ErrorMessage"] = "對不起,您沒有權限訪問頁面:" + curUrl + "<br/>如有疑問,請與權限分配人聯系<br/>" + authManagerInfo; HttpContext.Current.Server.Transfer("~/Prompt/ShowNoRigh.aspx"); } base.OnInit(e); }
在上面我們可以看到,通過服務已經獲取了該用戶所擁有的所有菜單及非菜單項目 menuHtml,menuHtml代碼如下,是一個Json數組, 菜單項太多,折疊起來了。
1 [ 2 { 3 "id": 1000005, 4 "parentId": null, 5 "Code": "991810201", 6 "name": "報價維護", 7 "CategoryCode": null, 8 "ImageIndex": null, 9 "SelectedImageIndex": null, 10 "tabUrl": null, 11 "icon": "/system/libs/js/tree/ztree/img/diy/1_close.png", 12 "Target": "fraContent", 13 "FormName": null, 14 "AssemblyName": null, 15 "PermissionScopeTables": null, 16 "SortCode": 1000005, 17 "Enabled": 1, 18 "DeletionStateCode": 0, 19 "IsMenu": 1, 20 "IsPublic": 1, 21 "IsVisible": 1, 22 "IsScope": 0, 23 "LastCall": null, 24 "Expand": 0, 25 "AllowEdit": 1, 26 "AllowDelete": 1, 27 "Description": null, 28 "CreateOn": "/Date(1400819927000)/", 29 "CreateUserid": "102383", 30 "CreateBy": "宋彪", 31 "ModifiedOn": "/Date(1400830672000)/", 32 "ModifiedUserid": "102383", 33 "ModifiedBy": "宋彪" 34 }, 35 { 36 "id": 1000006, 37 "parentId": 1000005, 38 "Code": "99181020101", 39 "name": "報價查詢", 40 "CategoryCode": null, 41 "ImageIndex": null, 42 "SelectedImageIndex": null, 43 "tabUrl": "/BaoJiaChaXun.aspx", 44 "icon": "/system/skin/titlebar_arrow.gif", 45 "Target": "fraContent", 46 "FormName": null, 47 "AssemblyName": null, 48 "PermissionScopeTables": null, 49 "SortCode": 1000006, 50 "Enabled": 1, 51 "DeletionStateCode": 0, 52 "IsMenu": 1, 53 "IsPublic": 1, 54 "IsVisible": 1, 55 "IsScope": 0, 56 "LastCall": null, 57 "Expand": 0, 58 "AllowEdit": 1, 59 "AllowDelete": 1, 60 "Description": null, 61 "CreateOn": "/Date(1400819973000)/", 62 "CreateUserid": "102383", 63 "CreateBy": "宋彪", 64 "ModifiedOn": "/Date(1400828358000)/", 65 "ModifiedUserid": "102383", 66 "ModifiedBy": "宋彪" 67 }, 68 { 69 "id": 1000008, 70 "parentId": null, 71 "Code": "991810202", 72 "name": "報價審核", 73 "CategoryCode": null, 74 "ImageIndex": null, 75 "SelectedImageIndex": null, 76 "tabUrl": null, 77 "icon": "/system/libs/js/tree/ztree/img/diy/2.png", 78 "Target": "fraContent", 79 "FormName": null, 80 "AssemblyName": null, 81 "PermissionScopeTables": null, 82 "SortCode": 1000008, 83 "Enabled": 1, 84 "DeletionStateCode": 0, 85 "IsMenu": 1, 86 "IsPublic": 1, 87 "IsVisible": 1, 88 "IsScope": 0, 89 "LastCall": null, 90 "Expand": 0, 91 "AllowEdit": 1, 92 "AllowDelete": 1, 93 "Description": null, 94 "CreateOn": "/Date(1400820277000)/", 95 "CreateUserid": "102383", 96 "CreateBy": "宋彪", 97 "ModifiedOn": "/Date(1400828373000)/", 98 "ModifiedUserid": "102383", 99 "ModifiedBy": "宋彪" 100 }, 101 { 102 "id": 1000010, 103 "parentId": 1000008, 104 "Code": "99181020202", 105 "name": "訪客信息", 106 "CategoryCode": null, 107 "ImageIndex": null, 108 "SelectedImageIndex": null, 109 "tabUrl": "/SysInfo/OnLineUser.aspx", 110 "icon": "/system/skin/titlebar_arrow.gif", 111 "Target": "fraContent", 112 "FormName": null, 113 "AssemblyName": null, 114 "PermissionScopeTables": null, 115 "SortCode": 1000010, 116 "Enabled": 1, 117 "DeletionStateCode": 0, 118 "IsMenu": 1, 119 "IsPublic": 1, 120 "IsVisible": 1, 121 "IsScope": 0, 122 "LastCall": null, 123 "Expand": 0, 124 "AllowEdit": 1, 125 "AllowDelete": 1, 126 "Description": null, 127 "CreateOn": "/Date(1400820486000)/", 128 "CreateUserid": "102383", 129 "CreateBy": "宋彪", 130 "ModifiedOn": "/Date(1400828383000)/", 131 "ModifiedUserid": "102383", 132 "ModifiedBy": "宋彪" 133 }, 134 { 135 "id": 1000012, 136 "parentId": null, 137 "Code": "9918102001", 138 "name": "左側導航頁面", 139 "CategoryCode": null, 140 "ImageIndex": null, 141 "SelectedImageIndex": null, 142 "tabUrl": "/FrameLeft.aspx", 143 "icon": null, 144 "Target": "fraContent", 145 "FormName": null, 146 "AssemblyName": null, 147 "PermissionScopeTables": null, 148 "SortCode": 1000012, 149 "Enabled": 1, 150 "DeletionStateCode": 0, 151 "IsMenu": 0, 152 "IsPublic": 1, 153 "IsVisible": 1, 154 "IsScope": 0, 155 "LastCall": null, 156 "Expand": 0, 157 "AllowEdit": 1, 158 "AllowDelete": 1, 159 "Description": null, 160 "CreateOn": "/Date(1400828603000)/", 161 "CreateUserid": "102383", 162 "CreateBy": "宋彪", 163 "ModifiedOn": "/Date(1400831720000)/", 164 "ModifiedUserid": "102383", 165 "ModifiedBy": "宋彪" 166 }, 167 { 168 "id": 1000013, 169 "parentId": null, 170 "Code": "Logout", 171 "name": "退出系統", 172 "CategoryCode": null, 173 "ImageIndex": null, 174 "SelectedImageIndex": null, 175 "tabUrl": "/Logout.aspx", 176 "icon": null, 177 "Target": "fraContent", 178 "FormName": null, 179 "AssemblyName": null, 180 "PermissionScopeTables": null, 181 "SortCode": 1000013, 182 "Enabled": 1, 183 "DeletionStateCode": 0, 184 "IsMenu": 0, 185 "IsPublic": 1, 186 "IsVisible": 1, 187 "IsScope": 0, 188 "LastCall": null, 189 "Expand": 0, 190 "AllowEdit": 1, 191 "AllowDelete": 1, 192 "Description": null, 193 "CreateOn": "/Date(1400828694000)/", 194 "CreateUserid": "102383", 195 "CreateBy": "宋彪", 196 "ModifiedOn": "/Date(1400833385000)/", 197 "ModifiedUserid": "102383", 198 "ModifiedBy": "宋彪" 199 }, 200 { 201 "id": 1000014, 202 "parentId": null, 203 "Code": "Main", 204 "name": "框架主頁面", 205 "CategoryCode": null, 206 "ImageIndex": null, 207 "SelectedImageIndex": null, 208 "tabUrl": "/Main.aspx", 209 "icon": null, 210 "Target": "fraContent", 211 "FormName": null, 212 "AssemblyName": null, 213 "PermissionScopeTables": null, 214 "SortCode": 1000014, 215 "Enabled": 1, 216 "DeletionStateCode": 0, 217 "IsMenu": 0, 218 "IsPublic": 1, 219 "IsVisible": 1, 220 "IsScope": 0, 221 "LastCall": null, 222 "Expand": 0, 223 "AllowEdit": 1, 224 "AllowDelete": 1, 225 "Description": null, 226 "CreateOn": "/Date(1400828790000)/", 227 "CreateUserid": "102383", 228 "CreateBy": "宋彪", 229 "ModifiedOn": "/Date(1400831595000)/", 230 "ModifiedUserid": "102383", 231 "ModifiedBy": "宋彪" 232 }, 233 { 234 "id": 1000015, 235 "parentId": null, 236 "Code": "ReadMe", 237 "name": "中轉費使用說明文檔", 238 "CategoryCode": null, 239 "ImageIndex": null, 240 "SelectedImageIndex": null, 241 "tabUrl": "/ReadMe.aspx", 242 "icon": null, 243 "Target": "fraContent", 244 "FormName": null, 245 "AssemblyName": null, 246 "PermissionScopeTables": null, 247 "SortCode": 1000015, 248 "Enabled": 1, 249 "DeletionStateCode": 0, 250 "IsMenu": 0, 251 "IsPublic": 1, 252 "IsVisible": 1, 253 "IsScope": 0, 254 "LastCall": null, 255 "Expand": 0, 256 "AllowEdit": 1, 257 "AllowDelete": 1, 258 "Description": null, 259 "CreateOn": "/Date(1400828829000)/", 260 "CreateUserid": "102383", 261 "CreateBy": "宋彪", 262 "ModifiedOn": "/Date(1400832451000)/", 263 "ModifiedUserid": "102383", 264 "ModifiedBy": "宋彪" 265 }, 266 { 267 "id": 1000018, 268 "parentId": 1000016, 269 "Code": "DialogLogin", 270 "name": "DialogLogin", 271 "CategoryCode": null, 272 "ImageIndex": null, 273 "SelectedImageIndex": null, 274 "tabUrl": "/PageUtils/DialogLogin.aspx", 275 "icon": null, 276 "Target": "fraContent", 277 "FormName": null, 278 "AssemblyName": null, 279 "PermissionScopeTables": null, 280 "SortCode": 1000018, 281 "Enabled": 1, 282 "DeletionStateCode": 0, 283 "IsMenu": 0, 284 "IsPublic": 1, 285 "IsVisible": 1, 286 "IsScope": 0, 287 "LastCall": null, 288 "Expand": 0, 289 "AllowEdit": 1, 290 "AllowDelete": 1, 291 "Description": null, 292 "CreateOn": "/Date(1400829312000)/", 293 "CreateUserid": "102383", 294 "CreateBy": "宋彪", 295 "ModifiedOn": "/Date(1400838755000)/", 296 "ModifiedUserid": "102383", 297 "ModifiedBy": "宋彪" 298 }, 299 { 300 "id": 1000019, 301 "parentId": 1000016, 302 "Code": "QuoteExpression", 303 "name": "QuoteExpression", 304 "CategoryCode": null, 305 "ImageIndex": null, 306 "SelectedImageIndex": null, 307 "tabUrl": "/PageUtils/QuoteExpression.aspx", 308 "icon": null, 309 "Target": "fraContent", 310 "FormName": null, 311 "AssemblyName": null, 312 "PermissionScopeTables": null, 313 "SortCode": 1000019, 314 "Enabled": 1, 315 "DeletionStateCode": 0, 316 "IsMenu": 0, 317 "IsPublic": 1, 318 "IsVisible": 1, 319 "IsScope": 0, 320 "LastCall": null, 321 "Expand": 0, 322 "AllowEdit": 1, 323 "AllowDelete": 1, 324 "Description": null, 325 "CreateOn": "/Date(1400829348000)/", 326 "CreateUserid": "102383", 327 "CreateBy": "宋彪", 328 "ModifiedOn": "/Date(1400838755000)/", 329 "ModifiedUserid": "102383", 330 "ModifiedBy": "宋彪" 331 }, 332 { 333 "id": 1000020, 334 "parentId": 1000016, 335 "Code": "QuotePrice", 336 "name": "QuotePrice", 337 "CategoryCode": null, 338 "ImageIndex": null, 339 "SelectedImageIndex": null, 340 "tabUrl": "/PageUtils/QuotePrice.aspx", 341 "icon": null, 342 "Target": "fraContent", 343 "FormName": null, 344 "AssemblyName": null, 345 "PermissionScopeTables": null, 346 "SortCode": 1000020, 347 "Enabled": 1, 348 "DeletionStateCode": 0, 349 "IsMenu": 0, 350 "IsPublic": 1, 351 "IsVisible": 1, 352 "IsScope": 0, 353 "LastCall": null, 354 "Expand": 0, 355 "AllowEdit": 1, 356 "AllowDelete": 1, 357 "Description": null, 358 "CreateOn": "/Date(1400829379000)/", 359 "CreateUserid": "102383", 360 "CreateBy": "宋彪", 361 "ModifiedOn": "/Date(1400838755000)/", 362 "ModifiedUserid": "102383", 363 "ModifiedBy": "宋彪" 364 }, 365 { 366 "id": 1000021, 367 "parentId": 1000016, 368 "Code": "RegionScan", 369 "name": "RegionScan", 370 "CategoryCode": null, 371 "ImageIndex": null, 372 "SelectedImageIndex": null, 373 "tabUrl": "/PageUtils/RegionScan.aspx", 374 "icon": null, 375 "Target": "fraContent", 376 "FormName": null, 377 "AssemblyName": null, 378 "PermissionScopeTables": null, 379 "SortCode": 1000021, 380 "Enabled": 1, 381 "DeletionStateCode": 0, 382 "IsMenu": 0, 383 "IsPublic": 1, 384 "IsVisible": 1, 385 "IsScope": 0, 386 "LastCall": null, 387 "Expand": 0, 388 "AllowEdit": 1, 389 "AllowDelete": 1, 390 "Description": null, 391 "CreateOn": "/Date(1400829412000)/", 392 "CreateUserid": "102383", 393 "CreateBy": "宋彪", 394 "ModifiedOn": "/Date(1400838755000)/", 395 "ModifiedUserid": "102383", 396 "ModifiedBy": "宋彪" 397 }, 398 { 399 "id": 1000022, 400 "parentId": 1000016, 401 "Code": "RegionSite", 402 "name": "RegionSite", 403 "CategoryCode": null, 404 "ImageIndex": null, 405 "SelectedImageIndex": null, 406 "tabUrl": "/PageUtils/RegionSite.aspx", 407 "icon": null, 408 "Target": "fraContent", 409 "FormName": null, 410 "AssemblyName": null, 411 "PermissionScopeTables": null, 412 "SortCode": 1000022, 413 "Enabled": 1, 414 "DeletionStateCode": 0, 415 "IsMenu": 0, 416 "IsPublic": 1, 417 "IsVisible": 1, 418 "IsScope": 0, 419 "LastCall": null, 420 "Expand": 0, 421 "AllowEdit": 1, 422 "AllowDelete": 1, 423 "Description": null, 424 "CreateOn": "/Date(1400829439000)/", 425 "CreateUserid": "102383", 426 "CreateBy": "宋彪", 427 "ModifiedOn": "/Date(1400838755000)/", 428 "ModifiedUserid": "102383", 429 "ModifiedBy": "宋彪" 430 }, 431 { 432 "id": 1000023, 433 "parentId": 1000016, 434 "Code": "Screen", 435 "name": "Screen", 436 "CategoryCode": null, 437 "ImageIndex": null, 438 "SelectedImageIndex": null, 439 "tabUrl": "/PageUtils/Screen.aspx", 440 "icon": null, 441 "Target": "fraContent", 442 "FormName": null, 443 "AssemblyName": null, 444 "PermissionScopeTables": null, 445 "SortCode": 1000023, 446 "Enabled": 1, 447 "DeletionStateCode": 0, 448 "IsMenu": 0, 449 "IsPublic": 1, 450 "IsVisible": 1, 451 "IsScope": 0, 452 "LastCall": null, 453 "Expand": 0, 454 "AllowEdit": 1, 455 "AllowDelete": 1, 456 "Description": null, 457 "CreateOn": "/Date(1400829468000)/", 458 "CreateUserid": "102383", 459 "CreateBy": "宋彪", 460 "ModifiedOn": "/Date(1400838755000)/", 461 "ModifiedUserid": "102383", 462 "ModifiedBy": "宋彪" 463 }, 464 { 465 "id": 1000024, 466 "parentId": 1000016, 467 "Code": "ZtoOrganize", 468 "name": "ZtoOrganize", 469 "CategoryCode": null, 470 "ImageIndex": null, 471 "SelectedImageIndex": null, 472 "tabUrl": "/PageUtils/ZtoOrganize.aspx", 473 "icon": null, 474 "Target": "fraContent", 475 "FormName": null, 476 "AssemblyName": null, 477 "PermissionScopeTables": null, 478 "SortCode": 1000024, 479 "Enabled": 1, 480 "DeletionStateCode": 0, 481 "IsMenu": 0, 482 "IsPublic": 1, 483 "IsVisible": 1, 484 "IsScope": 0, 485 "LastCall": null, 486 "Expand": 0, 487 "AllowEdit": 1, 488 "AllowDelete": 1, 489 "Description": null, 490 "CreateOn": "/Date(1400829495000)/", 491 "CreateUserid": "102383", 492 "CreateBy": "宋彪", 493 "ModifiedOn": "/Date(1400838755000)/", 494 "ModifiedUserid": "102383", 495 "ModifiedBy": "宋彪" 496 }, 497 { 498 "id": 1000026, 499 "parentId": 1000025, 500 "Code": "CacheManager", 501 "name": "CacheManager", 502 "CategoryCode": null, 503 "ImageIndex": null, 504 "SelectedImageIndex": null, 505 "tabUrl": "/SysInfo/CacheManager.aspx", 506 "icon": null, 507 "Target": "fraContent", 508 "FormName": null, 509 "AssemblyName": null, 510 "PermissionScopeTables": null, 511 "SortCode": 1000026, 512 "Enabled": 1, 513 "DeletionStateCode": 0, 514 "IsMenu": 0, 515 "IsPublic": 1, 516 "IsVisible": 1, 517 "IsScope": 0, 518 "LastCall": null, 519 "Expand": 0, 520 "AllowEdit": 1, 521 "AllowDelete": 1, 522 "Description": null, 523 "CreateOn": "/Date(1400829582000)/", 524 "CreateUserid": "102383", 525 "CreateBy": "宋彪", 526 "ModifiedOn": "/Date(1400837347000)/", 527 "ModifiedUserid": "102383", 528 "ModifiedBy": "宋彪" 529 }, 530 { 531 "id": 1000027, 532 "parentId": 1000025, 533 "Code": "OnlineTalk", 534 "name": "OnlineTalk", 535 "CategoryCode": null, 536 "ImageIndex": null, 537 "SelectedImageIndex": null, 538 "tabUrl": "/SysInfo/OnlineTalk.aspx", 539 "icon": null, 540 "Target": "fraContent", 541 "FormName": null, 542 "AssemblyName": null, 543 "PermissionScopeTables": null, 544 "SortCode": 1000027, 545 "Enabled": 1, 546 "DeletionStateCode": 0, 547 "IsMenu": 0, 548 "IsPublic": 1, 549 "IsVisible": 1, 550 "IsScope": 0, 551 "LastCall": null, 552 "Expand": 0, 553 "AllowEdit": 1, 554 "AllowDelete": 1, 555 "Description": null, 556 "CreateOn": "/Date(1400829605000)/", 557 "CreateUserid": "102383", 558 "CreateBy": "宋彪", 559 "ModifiedOn": "/Date(1400837347000)/", 560 "ModifiedUserid": "102383", 561 "ModifiedBy": "宋彪" 562 }, 563 { 564 "id": 1000028, 565 "parentId": 1000025, 566 "Code": "OnLineUser", 567 "name": "OnLineUser", 568 "CategoryCode": null, 569 "ImageIndex": null, 570 "SelectedImageIndex": null, 571 "tabUrl": "/SysInfo/OnLineUser.aspx", 572 "icon": null, 573 "Target": "fraContent", 574 "FormName": null, 575 "AssemblyName": null, 576 "PermissionScopeTables": null, 577 "SortCode": 1000028, 578 "Enabled": 1, 579 "DeletionStateCode": 0, 580 "IsMenu": 0, 581 "IsPublic": 1, 582 "IsVisible": 1, 583 "IsScope": 0, 584 "LastCall": null, 585 "Expand": 0, 586 "AllowEdit": 1, 587 "AllowDelete": 1, 588 "Description": null, 589 "CreateOn": "/Date(1400829629000)/", 590 "CreateUserid": "102383", 591 "CreateBy": "宋彪", 592 "ModifiedOn": "/Date(1400837347000)/", 593 "ModifiedUserid": "102383", 594 "ModifiedBy": "宋彪" 595 }, 596 { 597 "id": 1000029, 598 "parentId": 1000025, 599 "Code": "OnLineUserList", 600 "name": "OnLineUserList", 601 "CategoryCode": null, 602 "ImageIndex": null, 603 "SelectedImageIndex": null, 604 "tabUrl": "/SysInfo/OnLineUserList.aspx", 605 "icon": null, 606 "Target": "fraContent", 607 "FormName": null, 608 "AssemblyName": null, 609 "PermissionScopeTables": null, 610 "SortCode": 1000029, 611 "Enabled": 1, 612 "DeletionStateCode": 0, 613 "IsMenu": 0, 614 "IsPublic": 1, 615 "IsVisible": 1, 616 "IsScope": 0, 617 "LastCall": null, 618 "Expand": 0, 619 "AllowEdit": 1, 620 "AllowDelete": 1, 621 "Description": null, 622 "CreateOn": "/Date(1400829677000)/", 623 "CreateUserid": "102383", 624 "CreateBy": "宋彪", 625 "ModifiedOn": "/Date(1400837347000)/", 626 "ModifiedUserid": "102383", 627 "ModifiedBy": "宋彪" 628 }, 629 { 630 "id": 1000030, 631 "parentId": 1000025, 632 "Code": "SetParameter", 633 "name": "SetParameter", 634 "CategoryCode": null, 635 "ImageIndex": null, 636 "SelectedImageIndex": null, 637 "tabUrl": "/SysInfo/SetParameter.aspx", 638 "icon": null, 639 "Target": "fraContent", 640 "FormName": null, 641 "AssemblyName": null, 642 "PermissionScopeTables": null, 643 "SortCode": 1000030, 644 "Enabled": 1, 645 "DeletionStateCode": 0, 646 "IsMenu": 0, 647 "IsPublic": 1, 648 "IsVisible": 1, 649 "IsScope": 0, 650 "LastCall": null, 651 "Expand": 0, 652 "AllowEdit": 1, 653 "AllowDelete": 1, 654 "Description": null, 655 "CreateOn": "/Date(1400829704000)/", 656 "CreateUserid": "102383", 657 "CreateBy": "宋彪", 658 "ModifiedOn": "/Date(1400837347000)/", 659 "ModifiedUserid": "102383", 660 "ModifiedBy": "宋彪" 661 }, 662 { 663 "id": 1000032, 664 "parentId": 1000031, 665 "Code": "BaojiaSiteList", 666 "name": "BaojiaSiteList", 667 "CategoryCode": null, 668 "ImageIndex": null, 669 "SelectedImageIndex": null, 670 "tabUrl": "/Ajax/BaojiaSiteList.aspx", 671 "icon": null, 672 "Target": "fraContent", 673 "FormName": null, 674 "AssemblyName": null, 675 "PermissionScopeTables": null, 676 "SortCode": 1000032, 677 "Enabled": 1, 678 "DeletionStateCode": 0, 679 "IsMenu": 0, 680 "IsPublic": 1, 681 "IsVisible": 1, 682 "IsScope": 0, 683 "LastCall": null, 684 "Expand": 0, 685 "AllowEdit": 1, 686 "AllowDelete": 1, 687 "Description": null, 688 "CreateOn": "/Date(1400829803000)/", 689 "CreateUserid": "102383", 690 "CreateBy": "宋彪", 691 "ModifiedOn": "/Date(1400837269000)/", 692 "ModifiedUserid": "102383", 693 "ModifiedBy": "宋彪" 694 }, 695 { 696 "id": 1000033, 697 "parentId": 1000031, 698 "Code": "CommonDistrict", 699 "name": "CommonDistrict", 700 "CategoryCode": null, 701 "ImageIndex": null, 702 "SelectedImageIndex": null, 703 "tabUrl": "/Ajax/CommonDistrict.aspx", 704 "icon": null, 705 "Target": "fraContent", 706 "FormName": null, 707 "AssemblyName": null, 708 "PermissionScopeTables": null, 709 "SortCode": 1000033, 710 "Enabled": 1, 711 "DeletionStateCode": 0, 712 "IsMenu": 0, 713 "IsPublic": 1, 714 "IsVisible": 1, 715 "IsScope": 0, 716 "LastCall": null, 717 "Expand": 0, 718 "AllowEdit": 1, 719 "AllowDelete": 1, 720 "Description": null, 721 "CreateOn": "/Date(1400829850000)/", 722 "CreateUserid": "102383", 723 "CreateBy": "宋彪", 724 "ModifiedOn": "/Date(1400837269000)/", 725 "ModifiedUserid": "102383", 726 "ModifiedBy": "宋彪" 727 }, 728 { 729 "id": 1000034, 730 "parentId": 1000031, 731 "Code": "GetScanSiteByPager", 732 "name": "GetScanSiteByPager", 733 "CategoryCode": null, 734 "ImageIndex": null, 735 "SelectedImageIndex": null, 736 "tabUrl": "/Ajax/GetScanSiteByPager.aspx", 737 "icon": null, 738 "Target": "fraContent", 739 "FormName": null, 740 "AssemblyName": null, 741 "PermissionScopeTables": null, 742 "SortCode": 1000034, 743 "Enabled": 1, 744 "DeletionStateCode": 0, 745 "IsMenu": 0, 746 "IsPublic": 1, 747 "IsVisible": 1, 748 "IsScope": 0, 749 "LastCall": null, 750 "Expand": 0, 751 "AllowEdit": 1, 752 "AllowDelete": 1, 753 "Description": null, 754 "CreateOn": "/Date(1400829872000)/", 755 "CreateUserid": "102383", 756 "CreateBy": "宋彪", 757 "ModifiedOn": "/Date(1400837269000)/", 758 "ModifiedUserid": "102383", 759 "ModifiedBy": "宋彪" 760 }, 761 { 762 "id": 1000035, 763 "parentId": 1000031, 764 "Code": "ItemsZto", 765 "name": "ItemsZto", 766 "CategoryCode": null, 767 "ImageIndex": null, 768 "SelectedImageIndex": null, 769 "tabUrl": "/Ajax/ItemsZto.aspx", 770 "icon": null, 771 "Target": "fraContent", 772 "FormName": null, 773 "AssemblyName": null, 774 "PermissionScopeTables": null, 775 "SortCode": 1000035, 776 "Enabled": 1, 777 "DeletionStateCode": 0, 778 "IsMenu": 0, 779 "IsPublic": 1, 780 "IsVisible": 1, 781 "IsScope": 0, 782 "LastCall": null, 783 "Expand": 0, 784 "AllowEdit": 1, 785 "AllowDelete": 1, 786 "Description": null, 787 "CreateOn": "/Date(1400829891000)/", 788 "CreateUserid": "102383", 789 "CreateBy": "宋彪", 790 "ModifiedOn": "/Date(1400837269000)/", 791 "ModifiedUserid": "102383", 792 "ModifiedBy": "宋彪" 793 }, 794 { 795 "id": 1000036, 796 "parentId": 1000031, 797 "Code": "QuoteArea", 798 "name": "QuoteArea", 799 "CategoryCode": null, 800 "ImageIndex": null, 801 "SelectedImageIndex": null, 802 "tabUrl": "/Ajax/QuoteArea.aspx", 803 "icon": null, 804 "Target": "fraContent", 805 "FormName": null, 806 "AssemblyName": null, 807 "PermissionScopeTables": null, 808 "SortCode": 1000036, 809 "Enabled": 1, 810 "DeletionStateCode": 0, 811 "IsMenu": 0, 812 "IsPublic": 1, 813 "IsVisible": 1, 814 "IsScope": 0, 815 "LastCall": null, 816 "Expand": 0, 817 "AllowEdit": 1, 818 "AllowDelete": 1, 819 "Description": null, 820 "CreateOn": "/Date(1400829911000)/", 821 "CreateUserid": "102383", 822 "CreateBy": "宋彪", 823 "ModifiedOn": "/Date(1400837269000)/", 824 "ModifiedUserid": "102383", 825 "ModifiedBy": "宋彪" 826 }, 827 { 828 "id": 1000037, 829 "parentId": 1000031, 830 "Code": "Site", 831 "name": "Site", 832 "CategoryCode": null, 833 "ImageIndex": null, 834 "SelectedImageIndex": null, 835 "tabUrl": "/Ajax/Site.aspx", 836 "icon": null, 837 "Target": "fraContent", 838 "FormName": null, 839 "AssemblyName": null, 840 "PermissionScopeTables": null, 841 "SortCode": 1000037, 842 "Enabled": 1, 843 "DeletionStateCode": 0, 844 "IsMenu": 0, 845 "IsPublic": 1, 846 "IsVisible": 1, 847 "IsScope": 0, 848 "LastCall": null, 849 "Expand": 0, 850 "AllowEdit": 1, 851 "AllowDelete": 1, 852 "Description": null, 853 "CreateOn": "/Date(1400829932000)/", 854 "CreateUserid": "102383", 855 "CreateBy": "宋彪", 856 "ModifiedOn": "/Date(1400837269000)/", 857 "ModifiedUserid": "102383", 858 "ModifiedBy": "宋彪" 859 }, 860 { 861 "id": 1000038, 862 "parentId": 1000031, 863 "Code": "SiteAutoComplete", 864 "name": "SiteAutoComplete", 865 "CategoryCode": null, 866 "ImageIndex": null, 867 "SelectedImageIndex": null, 868 "tabUrl": "/Ajax/SiteAutoComplete.aspx", 869 "icon": null, 870 "Target": "fraContent", 871 "FormName": null, 872 "AssemblyName": null, 873 "PermissionScopeTables": null, 874 "SortCode": 1000038, 875 "Enabled": 1, 876 "DeletionStateCode": 0, 877 "IsMenu": 0, 878 "IsPublic": 1, 879 "IsVisible": 1, 880 "IsScope": 0, 881 "LastCall": null, 882 "Expand": 0, 883 "AllowEdit": 1, 884 "AllowDelete": 1, 885 "Description": null, 886 "CreateOn": "/Date(1400829950000)/", 887 "CreateUserid": "102383", 888 "CreateBy": "宋彪", 889 "ModifiedOn": "/Date(1400837269000)/", 890 "ModifiedUserid": "102383", 891 "ModifiedBy": "宋彪" 892 }, 893 { 894 "id": 1000039, 895 "parentId": 1000031, 896 "Code": "User", 897 "name": "User", 898 "CategoryCode": null, 899 "ImageIndex": null, 900 "SelectedImageIndex": null, 901 "tabUrl": "/Ajax/User.aspx", 902 "icon": null, 903 "Target": "fraContent", 904 "FormName": null, 905 "AssemblyName": null, 906 "PermissionScopeTables": null, 907 "SortCode": 1000039, 908 "Enabled": 1, 909 "DeletionStateCode": 0, 910 "IsMenu": 0, 911 "IsPublic": 1, 912 "IsVisible": 1, 913 "IsScope": 0, 914 "LastCall": null, 915 "Expand": 0, 916 "AllowEdit": 1, 917 "AllowDelete": 1, 918 "Description": null, 919 "CreateOn": "/Date(1400829970000)/", 920 "CreateUserid": "102383", 921 "CreateBy": "宋彪", 922 "ModifiedOn": "/Date(1400837269000)/", 923 "ModifiedUserid": "102383", 924 "ModifiedBy": "宋彪" 925 }, 926 { 927 "id": 1000040, 928 "parentId": null, 929 "Code": "OpenRight", 930 "name": "右側TAB容器頁面", 931 "CategoryCode": null, 932 "ImageIndex": null, 933 "SelectedImageIndex": null, 934 "tabUrl": "/OpenRight.aspx", 935 "icon": null, 936 "Target": "fraContent", 937 "FormName": null, 938 "AssemblyName": null, 939 "PermissionScopeTables": null, 940 "SortCode": 1000040, 941 "Enabled": 1, 942 "DeletionStateCode": 0, 943 "IsMenu": 0, 944 "IsPublic": 1, 945 "IsVisible": 1, 946 "IsScope": 0, 947 "LastCall": null, 948 "Expand": 0, 949 "AllowEdit": 1, 950 "AllowDelete": 1, 951 "Description": null, 952 "CreateOn": "/Date(1400832606000)/", 953 "CreateUserid": "102383", 954 "CreateBy": "宋彪", 955 "ModifiedOn": "/Date(1400833155000)/", 956 "ModifiedUserid": "102383", 957 "ModifiedBy": "宋彪" 958 } 959 ] View Code
現在我們需要在用戶登錄以後在前端將其展示出來,這裡我使用了ztree樹形菜單展示控件,關鍵代碼如下圖,
var zNodes = <%=menuHtml%>;//看上面獲取的數據 function initTreeMenu(b) { if (b) { var a = b.treeNodes; if (a) { $.fn.zTree.init($("#treeDemo"), setting, a) } } };
由於menuHtml中包含了非菜單項目,導致非菜單項也在ztree中展示出來,如下圖:
這樣就不好了,如何處理這種情況呢?我想使用通用權限管理系統的都會遇到這個情況,大家都會有不同的處理方式,
如果您使用的也是ztree菜單展示控件,可參考一下我的處理方式,Js代碼如下
function filter(childNodes) { var newNodes=new Array(); for (var i = 0, l = childNodes.length; i < l; i++) { if (childNodes[i].IsMenu) { newNodes.push(childNodes[i]); } }; return newNodes; }; var zNodes = <%=menuHtml%>; zNodes=filter(zNodes); function initTreeMenu(b) { if (b) { var a = b.treeNodes; if (a) { $.fn.zTree.init($("#treeDemo"), setting, a) } } };
另外,如果您的菜單項是通過異步方式獲取的,ztree中也有一個可以過濾菜單項的方法:
var setting = { async: { enable: true, dataType: 'JSON', dataName: 'treeNodes', url: "/Ajax/GetMenu.aspx", //傳回的數據格式不是ztree所需要的格式的時候,可以對數據進行轉化。正常情況下不需要實現dataFilter dataFilter: filter }, } function filter(treeId, parentNode, childNodes) { var newNodes=new Array(); for (var i = 0, l = childNodes.length; i < l; i++) { if (childNodes[i].IsMenu) { newNodes.push(childNodes[i]); } }; return newNodes; };
可以看到,使用了一個過濾方法filter,將非菜單項排除掉即可,這樣非菜單項就不會展示出來了,效果如下圖:
使用感受:第一次在子系統開發完成後配置吉日嘎拉通用權限管理菜單項,感覺確實非常強悍,我所使用及想象的權限都已被這個組件包含了,以前從來沒有看到對權限有如此深入研究的管理系統,沒有對權限走火入魔十余年的研究是做不出這樣的系統的,同樣感受到程序員要有自己研究的領域,把一件事做好確實不容易,要經得起各種考驗,適應各種使用環境,不下功夫,不經磨練是不行的。
目前只是使用這個權限系統進行菜單項的配置,吉日嘎拉權限系統底層是如何實現?如何對幾十個子系統進行權限分配而不混亂?如何按角色配置權限?按組織機構配置權限?按個人進行權限配置?多種多樣復雜的權限配置如何實現?今後我將在使用過程中不斷與大家分享 ~~ ,敬請關注 ~~ ,
好的思想、好的成果能夠節省很多資源,歡迎大家分享。