Làm cách nào để tôi xác định các khả năng cho một số mô hình dự đoán?Làm thế nào để tích hợp CanCan với nhiều mô hình dự đoán?
Trả lời
Mô hình người dùng hiện hành được thông qua vào Ability#initialize
, vì vậy bạn chỉ có thể kiểm tra các lớp học:
class Ability
include CanCan::Ability
def initialize(model)
case model
when Admin
can :manage, :all
when User
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
này làm việc cho tôi -
class Ability
include CanCan::Ability
def initialize(user)
if user.is_a?(Admin)
can :manage, :all
elsif user.is_a?(User)
can :create, Comment
can :read, :all
else
can :read, :all
end
end
end
Giả sử ứng dụng của bạn có hai riêng biệt Devise- mô hình người dùng được hỗ trợ được gọi là User
và Admin
. Điều này có nghĩa là bạn sử dụng các phương pháp như current_user
và current_admin
cạnh nhau.
Hãy tiếp tục giả định rằng bạn chỉ có/muốn có một Ability
lớp duy nhất, trong đó có tất cả các cài đặt cho phép Cancan của bạn ...
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new
case user
when User
can :create, Comment
can :read, :all
when Admin
can :manage, :all
end
end
end
Đây là chính xác những gì người khác đã đề xuất, nhưng có một bước bạn phải lấy.
Theo mặc định, CanCan giả định rằng phương thức current_user
tồn tại và sẽ trả về đối tượng Người dùng để so sánh với cài đặt Ability
của bạn. Tuy nhiên, người dùng quản trị của chúng tôi có thể được tìm thấy bằng cách sử dụng current_admin
. Nếu không nói với CanCan nơi để tìm các đối tượng quản trị, chúng sẽ không bao giờ được xem xét và do đó không bao giờ nhận được các quyền; chúng tôi phải thay đổi các giá trị mặc định khi giao dịch với quản trị viên.
Thêm dòng sau vào application_controller.rb
...
def current_ability
if admin_signed_in?
@current_ability ||= Ability.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
Bây giờ lớp Khả năng của chúng tôi sẽ xem xét các đối tượng quản lý nếu ai có sẵn, và rơi trở lại vào một tài khoản bình thường khi không có mặt.
Tiếp tục phát triển cho phép chúng ta chuyển quyền quản lý vào lớp Khả năng riêng của họ ...
def current_ability
if admin_signed_in?
@current_ability ||= AdminPowers.new(current_admin)
else
@current_ability ||= Ability.new(current_user)
end
end
Mọi chi tiết, thấy Changing Defaults trong Wiki. Kudos để Stefan để chỉ cho tôi bài viết thích hợp.
FYI - CanCan đã chết, sống lâu CanCanCan! Cập nhật các bản sửa lỗi và tính năng mới. Cùng một không gian tên, do đó, nó chỉ là một thay thế đá quý thả trong Gemfile của bạn.
gem 'cancancan', '~> 1.8'
sau khi tìm kiếm tôi cuối cùng đã tìm thấy câu trả lời hoàn chỉnh – coderVishal
- 1. Tích hợp Mongoid và Cancan
- 2. Dự đoán các giá trị sử dụng mô hình OLS với mô hình thống kê
- 3. Mô hình ẩn Markov dự đoán quan sát tiếp theo
- 4. Làm thế nào tôi có thể sử dụng hiệu quả mô hình dự đoán R từ Java?
- 5. mô hình django subclassed với queryset tích hợp
- 6. cách dự đoán các trường hợp mới bằng gói neuralnet
- 7. Làm thế nào để tích hợp Delphi với Active Directory?
- 8. Làm thế nào để làm cho DateFormat đoán dự định thế kỷ?
- 9. Làm thế nào để tích hợp Karma với TeamCity
- 10. Làm thế nào để tích hợp dự án Expressjs với jQuery-File-Upload?
- 11. Python: sử dụng scikit-learning để dự đoán, đưa ra các dự đoán trống
- 12. Dự đoán SIFT
- 13. CanCan và bộ điều khiển không có mô hình
- 14. Làm thế nào để vẽ ngẫu nhiên đánh chặn và độ dốc trong một mô hình hỗn hợp với nhiều yếu tố dự báo?
- 15. Làm thế nào chúng ta có thể kết hợp các yếu tố dự đoán từ hai mô hình tuyến tính khác nhau thành một?
- 16. Dự đoán MongoDB hiệu quả như thế nào?
- 17. Thu thập các dự đoán ngoài màn hình từ mô hình dấu mũ
- 18. Làm thế nào để tích hợp MSpec với MS Build?
- 19. Làm thế nào để tích hợp GruntJS với Netbeans 7.3?
- 20. Làm thế nào để tích hợp rubocop với Rake?
- 21. Làm thế nào để tích hợp Ajax với Symfony2
- 22. Làm thế nào để phù hợp với mô hình một lớp lồng nhau trong Scala?
- 23. Mô hình lớp UML làm thế nào để mô hình hóa nhiều mối quan hệ với nhau
- 24. Làm cách nào để Tích hợp Flot với AngularJS?
- 25. Làm thế nào để đào tạo và dự đoán sử dụng túi từ?
- 26. Cách sử dụng các authentication_keys khác nhau cho hai mô hình dự đoán?
- 27. tích hợp dự án sbt (play!) Với maven parent pom
- 28. Thuật toán dự đoán từ
- 29. Làm thế nào để tích hợp pep8.py trong Eclipse?
- 30. Làm thế nào để tích hợp Meteor và Ext.js?
Cảm ơn bạn Stefan. Thật không may, nó dường như không hoạt động. Nó chỉ áp dụng trường hợp Người dùng và không phải là Quản trị viên. Bất cứ khi nào tôi đăng nhập với tư cách quản trị viên, tôi chỉ có đặc quyền của khách. Có lẽ tôi đang làm điều gì đó sai nhưng tôi không thể tìm ra. – user1464499
Có thể 'Khả năng khởi tạo # không được gọi cho Quản trị viên của bạn. Thêm một số đăng nhập và kiểm tra [Thay đổi mặc định] (https://github.com/ryanb/cancan/wiki/Changing-Defaults). – Stefan