自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

AngularJS – 實(shí)現(xiàn)基于角色訪問控制的 GUI

開發(fā) 前端
這些天我們忙于應(yīng)用的前端工作,我們主要使用angular完成的。最近的一個需求是基于角色訪問GUI。一個用戶可以有多個角色,而它應(yīng)只能訪問授權(quán)給他的那一部分GUI……

這些天我們忙于應(yīng)用的前端工作,我們主要使用angular完成的。最近的一個需求是基于角色訪問GUI。一個用戶可以有多個角色,而它應(yīng)只能訪問授權(quán)給他的那一部分GUI。

我們主要通過在2個層次限制應(yīng)用的GUI訪問,來解決上述需求:
 

  1. 一個用戶只能訪問授權(quán)給他的頁面(或者說流量)

  2. 在一個頁面上,用戶只能看到授權(quán)給他的那部分。

要解決上述需求1,我們捕捉路有變化事件并對每一路由變化進(jìn)行檢查,看用戶是否授權(quán)訪問下一路由,保證他不會看到拒絕訪問的頁面

  1. $rootScope.$on("$routeChangeStart"function(event, next, current) {  
  2.     if(!authService.isUrlAccessibleForUser(next.originalPath))  
  3.     $location.path('/authError');  
  4. }); 

上面的authService 是我們創(chuàng)建的一個服務(wù),它有角色用戶列表,并給授權(quán)用戶路由流量。函數(shù)isUrlAccessibleForUser() 將檢查分配的用戶是否可以訪問給定流量并返回true或false.

服務(wù)將 從后臺和路由訪問信息中獲取一個用戶的角色列表,每個角色將保存在服務(wù)本身的一個Map集合中。(關(guān)于用戶和角色的一些細(xì)節(jié)可以存到數(shù)據(jù)局,通過后臺的方式獲取)

  1. app.factory('authService'function ($http) {  
  2.    
  3.     var userRole = []; // obtained from backend  
  4.     var userRoleRouteMap = {  
  5.         'ROLE_ADMIN': [ '/dashboard''/about-us''/authError' ],  
  6.         'ROLE_USER': [ '/usersettings''/usersettings/personal''/authError']  
  7.     };  
  8.    
  9.     return {  
  10.    
  11.         userHasRole: function (role) {  
  12.             for (var j = 0; j < userRole.length; j++) {  
  13.                 if (role == userRole[j]) {  
  14.                     return true;  
  15.                 }  
  16.             }  
  17.             return false;  
  18.         },  
  19.    
  20.         isUrlAccessibleForUser: function (route) {  
  21.             for (var i = 0; i < userRole.length; i++) {  
  22.                 var role = userRole[i];  
  23.                 var validUrlsForRole = userRoleRouteMap[role];  
  24.                 if (validUrlsForRole) {  
  25.                     for (var j = 0; j < validUrlsForRole.length; j++) {  
  26.                         if (validUrlsForRole[j] == route)  
  27.                             return true;  
  28.                     }  
  29.                 }  
  30.             }  
  31.             return false;  
  32.         }  
  33.     };  
  34. }); 

這將解決上述需求的第一點(diǎn),對于需求的第二點(diǎn)我們來創(chuàng)建一條指令。這個指令信息類似以下:

  1. <div my-access=”ROLE_ADMIN”>......</div> 

如果用戶有  ROLE_ADMIN 的這個角色的時候,將以上的html標(biāo)簽將被加載到html的頁面中,否則將 這個 Html標(biāo)簽從 頁面中移除。

指令的實(shí)現(xiàn)代碼如下:

  1. .directive('myAccess', ['authService''removeElement'function (authService, removeElement) {  
  2.     return{  
  3.         restrict: 'A',  
  4.         link: function (scope, element, attributes) {  
  5.    
  6.             var hasAccess = false;  
  7.             var allowedAccess = attributes.myAccess.split(" ");  
  8.             for (i = 0; i < allowedAccess.length; i++) {  
  9.                 if (authService.userHasRole(allowedAccess[i])) {  
  10.                     hasAccess = true;  
  11.                     break;  
  12.                 }  
  13.             }  
  14.    
  15.             if (!hasAccess) {  
  16.                 angular.forEach(element.children(), function (child) {  
  17.                     removeElement(child);  
  18.                 });  
  19.                 removeElement(element);  
  20.             }  
  21.    
  22.         }  
  23.     }  
  24. }]).constant('removeElement'function(element){  
  25.     element && element.remove && element.remove();  
  26. }); 

這一辦法是很簡潔的,而我們在GUI上很巧妙的實(shí)現(xiàn)了用戶授權(quán). 一個潛在的問題是,如果UI的渲染器在你從后臺獲取用戶角色之前就已經(jīng)在運(yùn)行了,那么該HTML中所有帶上該指令的部分都會從html中被移除掉. 這對于我們而言不是個麻煩,因?yàn)槲覀儠诘卿浲瓿芍畷r就獲取到了用戶角色的詳細(xì)信息。而如果這一問題對你而言是個問題的話,解決方案可以是這樣:如果用戶角色還沒有獲取到,就只是隱藏這些html元素,僅等到你獲取到角色列表之后再按照授權(quán)0信息將它們移除掉. 同時還請注意不能因?yàn)橛辛艘粋€GUI的訪問控制,就省掉了后臺固有的安全實(shí)現(xiàn).

達(dá)者廣交,分享為先!

英文:AngularJS – Role based access on GUI

譯文:http://www.oschina.net/translate/angularjs-role-based-access-on-gui

責(zé)任編輯:林師授 來源: 開源中國社區(qū) 編譯
相關(guān)推薦

2015-08-28 09:31:00

2013-08-22 09:55:14

2013-08-20 10:19:38

2019-11-22 09:40:40

SpringJava編程語言

2009-07-29 17:34:00

ibmdwWebSphereMQ

2009-02-01 10:54:00

MAC地址訪問控制

2014-06-10 16:51:44

云數(shù)據(jù)應(yīng)用訪問安全控制

2010-09-01 16:43:26

Squid ACLSquid訪問列表Squid

2025-02-18 00:00:05

vue后端權(quán)限

2022-12-30 09:54:55

智能建筑云計(jì)算

2010-08-18 13:13:01

靜態(tài)路由

2009-07-29 17:31:00

2010-05-25 11:35:02

JavaKilim

2018-02-25 07:10:32

訪問控制數(shù)據(jù)安全數(shù)據(jù)泄露

2013-03-08 10:09:30

Hadoop

2009-12-23 16:32:04

靜態(tài)路由配置

2012-09-18 09:50:41

2021-03-16 07:56:32

KubernetesWebhook權(quán)限

2023-11-14 07:09:38

2011-08-03 10:01:28

網(wǎng)絡(luò)智能手機(jī)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號