2014-10-03 13 views
8

Tôi đang sử dụng Devise và quan tâm đến việc sử dụng Pundit nhưng không thể tìm thấy nhiều nếu nó nên được tích hợp với Rolify hoặc nếu nó đứng một mình. CanCanCan hoạt động độc đáo với Rolify và tôi thích mô hình vai trò. Tôi có thiếu một lý do chính tại sao Pundit và Rolify dường như không được sử dụng với nhau rất nhiều?Tại sao Pundit không kết hợp với Rolify như CanCanCan là?

+6

Pundit sẽ chỉ làm việc tốt với Rolify hoặc bất kỳ hệ thống vai trò nào khác. – sevenseacat

+1

@sevenseacat đây cũng là câu trả lời đúng – MicFin

Trả lời

35

Tại sao không sử dụng chúng cùng nhau? Họ có thể dễ dàng sử dụng trong một thời trang như thế này

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 

Trong thực tế, điều mà rolifypundit không cùng là một cái gì đó tốt đẹp, và không phải là một thất bại thiết kế;)

1

Gần đây tôi đã sử dụng đá quý Pundit với Rails 4 bằng cách sử dụng devise.Pundit là hệ thống độc lập không phụ thuộc vào Rolify theo kinh nghiệm của tôi.

Thay vì sử dụng Rolify, tôi đã tạo di chuyển để thêm vai trò trong bảng người dùng hiện có, giúp bạn gán vai trò cho người dùng và kiểm tra vai trò của họ.

Xin hãy nhìn vào sơ đồ mà tôi đã tạo cho dự án của tôi:

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" 

đâu is_adminis_daily_user lĩnh vực đang gia tăng đối với vai trò người dùng.

Hy vọng điều này sẽ hữu ích!

+2

Điều này sẽ hoạt động nhưng không thể mở rộng. Hãy tưởng tượng bạn muốn thêm một người dùng is_premium. Bạn sẽ phải thay đổi mô hình DB của bạn. Tạo thay vì mô hình của riêng bạn UserRole (: id,: role_name) thuộc về người dùng nơi bạn có thể tạo bao nhiêu tên vai trò theo ý bạn cho mỗi người dùng ... Tôi đã đi với đá quý Rolify, mặc dù;) – luigi7up

Các vấn đề liên quan