2014-10-03 105 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

相關問題