簡體   English   中英

在emberjs中管理用戶角色?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM