2014-10-03 4 views
8

Devise를 사용하여 Pundit을 사용하는 데 관심이 있지만 Rolify와 통합되거나 독립형 인 경우 많은 정보를 찾을 수 없습니다. CanCanCan은 Rolify와 잘 어울리 며 롤 모델을 좋아합니다. Pundit과 Rolify가 함께 사용하지 않는 주요 이유가 누락 되었습니까?Pundit이 CanCanCan처럼 Rolify와 결합되지 않은 이유는 무엇입니까?

+6

학자가 Rolify와 함께 잘 작동합니다) 그들은 쉽게 사실이

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가 결합되지 않는다는 것은 뭔가 좋은, 그리고 디자인 실패 , 또는 다른 역할 시스템. – sevenseacat

+1

@sevenseacat 이것은 또한 올바른 대답입니다 – MicFin

답변

35

왜 함께 사용하지 않습니까?

1

최근에 devise.Pundit을 사용하여 Pundit gem을 Rails 4와 함께 사용했지만 내 경험에 따라 Rolify에 의존하지 않는 독립형 시스템입니다.

Rolify를 사용하는 대신 사용자에게 역할을 할당하고 보유하고있는 역할을 확인하는 데 도움이되는 기존 개발자 테이블에 역할을 추가하기 위해 마이그레이션을 만들었습니다.

내 프로젝트를 위해 만든 스키마에서 봐 주시기 바랍니다 : 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 사용자를 추가하려고한다고 가정 해보십시오. DB 모델을 변경해야합니다. 대신 사용자 당 원하는만큼 많은 역할 이름을 만들 수있는 own_to 사용자의 고유 한 모델 UserRole (: id, : role_name)을 만드십시오. 그래도 Rolify gem을 사용했습니다.) – luigi7up