根据用户权限显示/隐藏内容的最佳方法

时间:2013-10-24 16:00:40

标签: ember.js authorization

我正在寻找根据用户的权限显示或隐藏用户内容的最佳方式。我可以很容易地检查当前用户是否是管理员,或类似的东西,但让我们说用户想要编辑他们的帖子。然后管理员和作者都需要能够看到编辑按钮。

对此最佳解决方案是什么?

之前,我使用过this custom 'can' helper,但在Ember Auth更新后,此解决方案停止了工作。请参阅here

1 个答案:

答案 0 :(得分: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;
  }
});