0
在我的應用程序中,我希望以這種方式實現角色和權限,即用戶管理員可以在其瀏覽器中創建新角色。所以我需要權限表和角色表,其中每個角色都是權限的組合。現在我使用了CanCan gem,但這種行爲並不是這個gem的默認行爲,最終我得到了非常複雜的角色結構和權限檢查。任何人都可以告訴我什麼寶石提供這種行爲,或者我應該沒有任何寶石?存儲在數據庫,導軌中的權限和角色3.1
在我的應用程序中,我希望以這種方式實現角色和權限,即用戶管理員可以在其瀏覽器中創建新角色。所以我需要權限表和角色表,其中每個角色都是權限的組合。現在我使用了CanCan gem,但這種行爲並不是這個gem的默認行爲,最終我得到了非常複雜的角色結構和權限檢查。任何人都可以告訴我什麼寶石提供這種行爲,或者我應該沒有任何寶石?存儲在數據庫,導軌中的權限和角色3.1
見Abilities in Database和Ability for Other Users從康康舞維基:
class Ability
include CanCan::Ability
def initialize(user)
can do |action, subject_class, subject|
user.permissions.find_all_by_action(aliases_for_action(action)).any? do |permission|
permission.subject_class == subject_class.to_s &&
(subject.nil? || permission.subject_id.nil? || permission.subject_id == subject.id)
end
end
end
end
編輯
一些負載優化:
class Ability
include CanCan::Ability
def initialize(user, context = nil)
if context.nil?
can do |action, subject_class, subject|
user.permissions.find_all_by_action(aliases_for_action(action)).any? do |permission|
permission.subject_class == subject_class.to_s &&
(subject.nil? || permission.subject_id.nil? || permission.subject_id == subject.id)
end
elsif context == :post
can :manage, Post, :id => y
elsif context == :users
can :manage, User, :id => x
end
...
並在控制器:
class UsersController
protected
def current_ability
Ability.new(current_user, :users)
class PostsController
protected
def current_ability
Ability.new(current_user, :posts)
是的,我實現它像這現在,但它太多了當頁面加載時任務到DB。我想知道是否有更合適的方法來做到這一點。 – 2011-12-14 14:03:20