1

多くのエージェントを持つパートナーのリソースと、多くのエージェントを持つユーザーを取得しました。

Cancan&RolifyでPartenaireごとにアクセスを制限したい。

私が見つけた唯一のハックは、user.agence_idsとpartenaire.agence_idsの配列サイズを評価し、それが1以上であるかどうかを評価して、ユーザーがPartenaireにアクセスできるようにすることです。

カスタム アクションを実行して、Index ビューを Partenaires_controller にフィルター処理しました。

パートナーとユーザーが少なくとも 1 つのエージェントを共有している場合、ユーザーにアクセスを許可することは可能ですか?

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

ユーザー.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
4

1 に答える 1

0

別のSO投稿で解決策を見つけました。

 (user.agence_ids & partenaire.agence_ids).present?
于 2013-02-27T09:16:40.977 に答える