2013-10-24 14 views
5

İzinlerini temel alarak bir kullanıcı için içeriği göstermenin veya gizlemenin en iyi yolunu arıyorum. Mevcut kullanıcının bir yönetici mi yoksa böyle bir şey mi olduğunu kolayca kontrol edebilirim, ancak bir kullanıcının gönderilerini düzenlemek istediğini varsayalım. Daha sonra hem yönetici hem de yazar düzenleme düğmesini görebilmeli.Kullanıcıların iznine bağlı olarak içeriği göstermek/gizlemek için en iyi yaklaşım

Bunun için en iyi çözüm nedir?

Daha önce, this custom 'can' helper kullanmıştım, ancak Ember Auth'daki bir güncellemeden sonra, bu çözüm çalışmayı durdurdu. here'a bakın.

cevap

1

Genellikle izin tablosunu, kullanıcı rollerini ve can(), isAdmin() gibi bazı yardımcıları tutan bir hizmet oluşturur.

Örneğin

: app/hizmet/kullanıcı 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; 
    } 
}); 
İlgili konular