[英]Managing user roles in emberjs?
我有一個nodejs api,如下所示
route.post("/token",function(req,res){
authLib
.checkForm(req.body)
.then(authLib.findUser)
.then(authLib.isValidUser)
.then(authLib.authenticate)
.then(authLib.genToken)
.then((token)=>{
res
.status(200)
.json({'access_token': token});
})
.catch((err)=>{
res
.status(400)
.json({'error': err.message});
});
});
用戶model
包含具有用戶角色的字段。 每個用戶角色都有一個不同的儀表板。 我已經使用oauth2-password-grant
實現了ember-simple-auth,儀表板的模板如下所示
{{#if session.isAuthenticated}}
{{#app-dashboard}}
{{/app-dashboard}}
{{else}}
{{#landing-app}}
{{/landing-app}}
{{/if}}
問題是如何區分用戶角色。 一種方法可能是使用ajax請求來獲取角色,但這意味着對所有視圖的額外XHR請求。 在Ember.$
使用XHR的另一個問題是授權令牌沒有附加到請求。 解決這個問題的最佳方法是什么?
我沒有使用過ember-simple-auth,但有一種方法可能有助於在成功用戶“login”上發送角色/權限對象以及令牌。 然后創建一個存儲角色/權限對象的“用戶權限”Ember服務,並在需要時檢查用戶是否具有某個權限。 我將使用數組作為示例權限對象。 您應該能夠使用單個XHR請求執行此操作。
當然,任何客戶端“安全性”本質上都是不安全的,因此請確保保護您的路由免受服務器端的用戶行為的影響。
首先,您需要在與用戶關聯的數據庫中使用某些角色或權限。 然后向Node API添加一些邏輯,以返回經過身份驗證的用戶的權限列表以及該令牌。
然后,在Ember中,定義一個這樣的權限服務:
export default Ember.Service.extend({
permissions: [], // Sample permissions: "seeAdminPanel", "deleteUsers"
// You can create a computed property to check permissions (good for templates)
canDeleteUsers: Ember.computed('permissions', function() {
//Check that the permissions object contains the deleteUsers permission
let permissions = this.get('permissions');
let permissionToCheck = 'deleteUsers';
let userHasPermission = permissions.indexOf(permissionToCheck) > -1;
return (userHasPermission);
}),
// Or create a generic function to check any permission (good for checking in a function)
canCurrentUser(permissionToCheck) {
let permissions = this.get('permissions');
return (permissions.indexOf(permissionToCheck) > -1);
}
});
當您的Ember應用程序命中您的Node api時,它將獲得成功響應中的權限對象。 在成功回調中設置權限服務上的對象(記得注入您的服務):
let userPermissionsService = this.get('userPermissionsService');
userPermissionsService.set('permissions', ["deleteUsers"]);
然后在模板中使用:
{{#if userPermissionsService.canDeleteUsers}}
<button>Delete User</button>
{{/if}}
或者在函數中使用:
let userPermissionsService = this.get('userPermissionsService');
if (userPermissionsService.canCurrentUser("deleteUsers")) {
this.deleteUser()
}
在使用XHR請求傳遞授權令牌方面,您應該能夠通過使用常規jquery ajax請求手動執行此操作(根據http://api.jquery.com/jQuery在請求中設置headers對象。 ajax / )或者如果要將它附加到每個Ember數據請求,自定義REST適配器應該可以工作: https : //guides.emberjs.com/v2.13.0/models/customizing-adapters/#toc_headers-customization
要檢查權限,請考慮使用Ember-Can
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.