2013-10-24 55 views
5

我正在尋找基於用戶權限顯示或隱藏用戶內容的最佳方式。我可以輕鬆地檢查當前用戶是否是管理員,或者類似的東西,但假設用戶想要編輯他們的帖子。然後管理員和作者都需要能夠看到編輯按鈕。基於用戶權限顯示/隱藏內容的最佳方法

這是最好的解決方案是什麼?

之前,我用this custom 'can' helper,但在Ember Auth更新後,此解決方案停止工作。見here

回答

1

我通常會創建一個服務來保存許可表,用戶角色和一些助手,比如can(),isAdmin()。

例如: 應用程序/服務/用戶rights.js

import Ember from 'ember'; 

export default Ember.Service.extend({ 
    setData(roles, rightsTable){ 
    this.set('rightsTable', rightsTable); 
    this.set('roles', roles); 
    }, 
    can: function (action) { 
    let roles = this.get('roles'); 
    if (!roles /*|| !this.get('rightsTable')*/) { 
     return false; 
    } 
    let rolesToAssignOrder = [ 
     'ceo', 
     'partner' 
    ]; 

    let rolesToReceiveOrder = [ 
     'senior_broker', 
     'broker', 
     'junior_broker' 
    ]; 

    let buildingsModeration = [ 
     'ceo', 
     'partner', 
     'updaters_manager' 
    ]; 
    let seeBuildingsModeration = Array.prototype.concat(buildingsModeration, ['office_manager']); 

    switch (action) { 
     case 'canAssignOrder': 
     return this.checkRoles(rolesToAssignOrder); 
     case 'canReceiveOrder': 
     return this.checkRoles(rolesToReceiveOrder); 
     case 'canModerateBC': 
     return this.checkRoles(buildingsModeration); 
     case 'canSeeModeratingBC': 
     return this.checkRoles(seeBuildingsModeration); 
     case 'canChangeBroker': 
     return this.checkRoles(['ceo']); 
     default: 
     return false; 
    } 
    }, 
    checkRoles(allowedRoles){ 
    let can = false; 
    this.get('roles').forEach(el=>{ 
     if(allowedRoles.indexOf(el.name) > -1){ 
     can = true; 
     } 
    }); 
    return can; 
    } 
});