2011-01-07 188 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

相关问题