2014-10-03 93 views
8

我正在使用Devise并对使用Pundit感兴趣,但无法找到很多关于它应该与Rolify集成还是独立使用的问题。 CanCanCan与Rolify很好地合作,我喜欢角色模型。我是否错过了一个主要原因,为什么Pundit和Rolify似乎并没有被一起使用?为什么Pundit不像CanCanCan那样与Rolify结合?

+6

权威人士会工作得很好用Rolify ,或任何其他角色系统。 – sevenseacat 2014-10-06 04:38:08

+1

@sevenseacat这也是一个正确的答案 – MicFin 2014-10-06 04:54:15

回答

35

为什么不一起使用它们?他们可以在一个时尚很容易地使用这样

class OrganisationPolicy 
    def initialize(user, organisation) 
    @user = user 
    @organisation = organisation 
    end 

    def index? 
    @user.has_role? :admin 
    end 

    def show? 
    @user.has_role?(:admin) || @user.organisation == @organisation 
    end 
end 

事实上,rolifypundit不连接的东西是一件好事,而不是设计的失败;)

1

我最近在使用devise时使用了Rails 4的Pundit gem.Pundit是独立系统,根据我的经验,它不依赖于Rolify。

除了使用Rolify之外,我还创建了迁移以在现有的devise user表中添加角色,这可以帮助您为用户分配角色并检查他们拥有哪些角色。

请看一看,我为我的项目创建的模式:凡is_adminis_daily_user栏供用户角色添加

create_table "users", force: true do |t| 
    t.string "email",     default: "", null: false 
    t.string "encrypted_password",  default: "", null: false 
    t.string "reset_password_token" 
    t.datetime "reset_password_sent_at" 
    t.datetime "remember_created_at" 
    t.integer "sign_in_count",   default: 0, null: false 
    t.datetime "current_sign_in_at" 
    t.datetime "last_sign_in_at" 
    t.string "current_sign_in_ip" 
    t.string "last_sign_in_ip" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    **t.boolean "is_admin" 
    t.boolean "is_daily_user" 

希望这会有所帮助!

+2

这将工作,但它不可扩展。想象一下你想添加一个is_premium用户。你将不得不改变你的数据库模型。创建一个你自己的模型UserRole(:id,:role_name)belongs_to用户,你可以为每个用户创建尽可能多的角色名称......尽管我使用了Rolify gem;) – luigi7up 2016-10-21 08:47:23

相关问题