2012-06-21 22 views
0

我有5個角色,用戶可以在我的rails網站如何有條件地設置用戶可以更新的角色?

- @roles.each do |role| 
    %label.radio 
    = radio_button_tag 'user[role_ids][]', role.id, @user.has_role?(role.name) 
    = role.name 

,我想是基於我想要麼禁用它們或隱藏通通

我是CURRENT_USER角色做什麼想實現這種方式,但它沒有看起來很乾淨....任何想法

我想添加這個

:disabled => disable_role?(current_user, role.name) 

def disable_role?(current_user, role_name) 
    case 
    when role_name == 'superadmin' and current_user.superadmin? 
    return false 
    when role_name == 'admin' and (current_user.superadmin? || current_user.admin?) 
    return false 
    when role_name == 'standard' and (current_user.superadmin? || current_user.admin?) 
    return false 
    else 
    return true 
    end 
end 

我還有其他的條件,但我想告訴你我的方法 的例子這似乎不太rubylike ....任何其他suggetions

回答

1

對於創建角色,我喜歡使用的寶石CanCan由Ryan Bates創建。他演示瞭如何使用它在屏幕視頻上進行身份驗證:http://railscasts.com/episodes/192-authorization-with-cancan

但是,如果您要從頭開始創建,我以前只需在我的用戶模型中添加一個新方法,以便每次驗證我是否檢查用戶擁有的角色,我想

class User < ActiveRecord::Base 
    def has_hole? role 
    self.roles.where(name: role).size != 0 
    end 
end 
+0

但它不只是檢查用戶是否具有該角色....例如,管理員用戶可以將用戶更改爲admin,標準但不是superadmin – Trace

1

這是我會做什麼:

class Role < ActiveRecord::Base 
    ROLES_HIERARCHY = ['standard', 'admin', 'superadmin'] 

    def hierarchy(role_name) 
    ROLES_HIERARCHY.index(role_name) 
    end 
    ... 
end 

而且

- @roles.each do |role| 
    %label.radio 
    - if user.role.hierarchy > role.hierarchy 
     = radio_button_tag 'user[role_ids][]', role.id, @user.has_role?(role.name) 
     = role.name 
相關問題