私は現在、それぞれの条件に応じてCanCanの役割を分ける方法について固執しています。 私たちのアプリケーションでは、数学、英語、歴史など多くのカテゴリがあり、それぞれには多くのコースがあります。Rails:CanCanを使用して、単一のモデルのインスタンスに応じて複数のロールを定義できますか?
各ユーザーは、各カテゴリでさまざまな役割を持つことができます。たとえば、ジョンは数学の「読者」になることができます。つまり、数学に含まれるすべてのコースを読むことができます。ジョンは英語の "ライター"でもあり、英語ですべてのコースを読んだり、カテゴリ内のコースを作成したり、英語で作成したコースのみを編集/削除することができます。
これらがJohnが持つ唯一の役割であれば、彼はnavbarでカテゴリ履歴を見ることができず、歴史の中にあるコースへのアクセスが拒否されます。
これらは関係が設定されている方法です:私たちは
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in) #guest
if user.has_role? :reader
reader(user)
end
if user.has_role? :writer
writer(user)
end
end
#BE ABLE TO SEE COURSES AND CATS FOR PERMITTED CATS.
def reader(user)
can :read, Category, :roles => { :user_id => user.id, :level => "reader" }
## how would we be able to limit reading of courses that are within permitted categories? something like category.courses ~~
end
def writer(user)
reader(user) #inheriting from reader? this doesnt work because level is hardcoded into reader
can :read, Category, :roles => { :user_id => user.id, :level => "writer"}
# 1.you can read all courses in category that you are given permission to
# 2.you can write courses in permitted category
# 3.you can edit, delete courses that only youve created within permitted category
end
end
質問持つability.rb/
class User < ActiveRecord::Base
has_many :roles
def has_role?(role_sym)
roles.any? { |r| r.level.underscore.to_sym == role_sym }
end
end
class Category < ActiveRecord::Base
has_many :roles
has_many :courses
end
class Role < ActiveRecord::Base
belongs_to :user
belongs_to :category
attr_accessible :level, :category_id, :user_id
end
モデルで:
はどのようにしての役割を分離します"リーダー"と "ライター"は正しい方法で?アクセスしているカテゴリ内のコースにはどのようにアクセスすればよいですか?
ability.rbでリーダーメソッドとライターメソッドを定義した後、ビューページでどのように使用しますか?現在のドキュメントでは「<%if:?read、@ category%> 」のようなものが使われていますが、これは分離して定義したメソッドを使用していないようです。
p.s.ゲスト、リーダー、作家、編集者、マネージャー、管理者、app_admin(開発者)の7つの役割があります
私は3日間これを解決しようとしています。初心者!事前に感謝します