2013-05-28 72 views
0

我對用戶有超級用戶>管理>其他用戶的分層角色模型。 (我正在使用cancan實現此功能) 超級用戶應該能夠訪問所有其他用戶的配置文件,但管理員應該只能訪問他創建的用戶的用戶配置文件。 是否有可能爲創建的用戶分配所有權,就像可能對帖子/評論所做的那樣? 我的能力文件當前看起來如下:是否有可能跟蹤哪些用戶創建其他用戶? Ruby on Rails

class Ability 
include CanCan::Ability 

def initialize(user) 
    user ||= User.new 
    if user.status == "Super User" 
    can :manage, :all 
    elsif user.status == "Admin" 
    can :create, User   
    can :show, User, :id => user.id 
    can :update, User, :id => user.id 

end 

回答

1

當然,你只需要跟蹤它在你的數據庫。例如,您可以在用戶數據庫中添加一個「creator_id」字段,該數據庫存儲創建用戶的標識(管理員或超級用戶)。

在用戶模式,你可以這樣做:

belongs_to :creator, class_name: 'User' 

然後在你的能力:

class Ability 
include CanCan::Ability 

def initialize(user) 
    user ||= User.new 
    if user.status == "Super User" 
    can :manage, :all 
    elsif user.status == "Admin" 
    can :create, User   
    can [:show, :update], User, :id => user.id 
    can [:show, :update], User, :creator_id => user.id 
    end 
end 

我結合你的節目/更新線路,使管理員可以查看或更新他/她自己。然後,我添加了另一個可以行,以便管理員可以顯示/更新由當前用戶創建的任何用戶。

編輯:

無論你正在創建的用戶,我猜current_user是管理員,是嗎?您可以設置用戶的creator屬性,然後:

user = User.new(name: 'Foo Bar') # or however you are doing it 
user.creator = current_user 
user.save 
+0

感謝您的快速回復!我想我正在抓住這個概念(生氣這件事很簡單,謝謝)現在,我在創建用戶時創建creator_id時遇到了一些麻煩。我在我的用戶數據庫中爲creator_id添加了一列,但對如何存儲值有點不確定。 – CimmerianMuse

+0

請參閱我的編輯:] –

+0

謝謝。我仍在努力。我仍然不能完全按照自己的意願去做,但是你在幫助我朝着正確的方向努力方面非常有幫助 – CimmerianMuse

相關問題