2013-02-26 45 views
1

我得到了Partenaires的資源,他們有很多Agences和擁有很多Agence的用戶。准許用戶使用Cancan和Rolify與has_and_belongs_to_many的關係

我想限制每個Partenaire與康康的訪問& Rolify。

我發現這樣做的唯一方法就是評估user.agence_ids & partenaire.agence_ids的數組大小,如果它大於或等於1,則用戶可以訪問Partenaire。

我做了自定義操作來將我的Index視圖過濾到我的Partenaires_controller中。

如果Partenaire和用戶至少有一個共同的Agence,是否可以授予用戶訪問權限?

class Ability 
include CanCan::Ability 

def initialize(user) 
    # Define abilities for the passed in user here. For example: 
    # 
    user ||= User.new # guest user (not logged in) 
    if user.has_role? :admin 
    can :access, :rails_admin # grant access to rails_admin 
    can :dashboard # grant access to the dashboard 
    can :manage, :all 
    elsif user.has_role? :user 
    can [:index, :edit, :update, :show, :new, :create], Partenaire do |partenaire| 
     (user.agence_ids & partenaire.agence_ids).size >= 1 
    end 
    end 
end 
end 

Partenaires_controller.rb

def index 
flash[:ville] = params[:id] 
@ville = flash[:ville] 
#Permet l'affichage des partenaire sur un tri de ville 
if current_user.has_role? :user 
    if params[:id] == 'ALL' || params[:id].nil? 
    @partenaires = @search.includes(:agences).where(['agences.id IN (?)', current_user.agence_ids]).order(:ville, "partenaires.nom asc") 
    elsif params[:id] != 'ALL' && !params[:id].nil? 
    @partenaires = @search.where(:ville => params[:id]).order("ville, nom asc").where(:id => current_user.agence_ids) 
    end 
elsif current_user.has_role? :admin 
    if params[:id] == 'ALL' || params[:id].nil? 
    @partenaires = @search.order("ville, nom asc") 
    elsif params[:id] != 'ALL' && !params[:id].nil? 
    @partenaires = @search.where(:ville => params[:id]).order("ville, nom asc") 
    end 
end 

User.rb

class User < ActiveRecord::Base 
rolify 
has_and_belongs_to_many :agences 
end 

Agence.rb

class Agence < ActiveRecord::Base 
has_and_belongs_to_many :users 
has_and_belongs_to_many :partenaires 

Partenaire.rb

class Partenaire < ActiveRecord::Base 
has_and_belongs_to_many :agences 

回答

0

在另一個SO帖子中找到了解決方案。

(user.agence_ids & partenaire.agence_ids).present? 
相關問題