2013-10-24 10 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; 
    } 
}); 
関連する問題