2011-01-07 187 views
2

我使用cancan作爲我的授權引擎。Rails 3:向用戶添加角色

我已經在用戶的角色:

ROLES = %w[admin normal author corp] 

我也有方法來添加和檢查的作用:

#cancan 
    def roles=(roles) 
    self.roles_mask = (roles & ROLES).map { |r| 2**ROLES.index(r) }.sum 
    end 

    def roles 
    ROLES.reject do |r| 
     ((roles_mask || 0) & 2**ROLES.index(r)).zero? 
    end 
    end 

    def is?(role) 
    roles.include?(role.to_s) 
    end 

而且我已經在用戶模式# roles_mask :integer

但是,我想有一個after_save :add_normal_role它將正常角色分配給用戶。

基本上,我無法(不知道)如何爲每個用戶分配角色。

這是我,這不工作:

private 

    def add_normal_role 
    self.roles=(ROLES[1]) 
    end 

感謝

回答

2

你應該嘗試使用before_create回調保證用戶有一個正常的作用。

您目前的回調問題是因爲它是after_save,您的修改默認情況下不會保存。 (在after_save回調中保存是導致無限循環的壞主意......)您也可以使用before_save回調(使用您已有的相同代碼),這也可以起作用。

但是,由於在創建對象時(而不是在每次更新時)只需添加普通角色,因此before_create更適合。

+0

有了這段代碼,我有這個錯誤:未定義的方法'&'爲「正常」:字符串 – donald 2011-01-07 15:08:29

相關問題