为什么Pundit没有像CanCanCan那样与Rolify结合?

时间:2014-10-03 01:40:07

标签: ruby-on-rails-4 devise cancan rolify pundit

我正在使用Devise并且对使用Pundit感兴趣,但是如果它应该与Rolify集成或者它是独立的话,就无法找到。 CanCanCan与Rolify很好地配合,我喜欢角色模型。我错过了Pundit和Rolify似乎没有一起使用的主要原因吗?

2 个答案:

答案 0 :(得分:39)

为什么不一起使用它们?它们可以像这样轻松地使用

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 :(得分:1)

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

我没有使用Rolify,而是创建了迁移,以便在现有的设计用户表中添加角色,这有助于您为用户分配角色并检查他们拥有的角色。

请查看我为项目创建的架构:

 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"

为用户角色添加了is_adminis_daily_user字段。

希望这有帮助!