Tôi hiện đang bị mắc kẹt về cách tách vai trò cho CanCan tùy thuộc vào từng điều kiện mà chúng tôi muốn. Trong ứng dụng của chúng tôi, có nhiều loại (chẳng hạn như toán học, tiếng anh, lịch sử, vv) và trong mỗi loại có nhiều khóa học.Đường ray: Sử dụng CanCan để xác định nhiều vai trò tùy thuộc vào trường hợp của một Mô hình đơn lẻ?
Mỗi người dùng có thể có nhiều vai trò khác nhau trên mỗi danh mục. Ví dụ, John có thể là một "người đọc" cho toán học, có nghĩa là anh ta có thể đọc tất cả các khóa học trong toán học. John cũng có thể là một "nhà văn" cho tiếng Anh, có nghĩa là anh ta có thể đọc tất cả các khóa học bằng tiếng Anh, tạo ra một khóa học trong thể loại tiếng Anh, và chỉnh sửa/xóa chỉ các khóa học anh ta tạo ra trong tiếng Anh.
Nếu đây là những vai trò duy nhất mà John có, anh sẽ không thể xem lịch sử danh mục trong thanh điều hướng và sẽ bị từ chối truy cập vào các khóa học trong lịch sử.
Đây là cách quan hệ được thiết lập:
class User < ActiveRecord::Base
has_many :roles
def has_role?(role_sym)
roles.any? { |r| r.level.underscore.to_sym == role_sym }
end
end
class Category < ActiveRecord::Base
has_many :roles
has_many :courses
end
class Role < ActiveRecord::Base
belongs_to :user
belongs_to :category
attr_accessible :level, :category_id, :user_id
end
trong mô hình/ability.rb chúng tôi có
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in) #guest
if user.has_role? :reader
reader(user)
end
if user.has_role? :writer
writer(user)
end
end
#BE ABLE TO SEE COURSES AND CATS FOR PERMITTED CATS.
def reader(user)
can :read, Category, :roles => { :user_id => user.id, :level => "reader" }
## how would we be able to limit reading of courses that are within permitted categories? something like category.courses ~~
end
def writer(user)
reader(user) #inheriting from reader? this doesnt work because level is hardcoded into reader
can :read, Category, :roles => { :user_id => user.id, :level => "writer"}
# 1.you can read all courses in category that you are given permission to
# 2.you can write courses in permitted category
# 3.you can edit, delete courses that only youve created within permitted category
end
end
Câu hỏi:
Làm thế nào để chúng ta tách vai trò của "người đọc" và "nhà văn" theo cách chính xác? Làm cách nào để chúng tôi truy cập các khóa học nằm trong các danh mục mà chúng tôi có quyền truy cập?
Sau khi xác định phương thức người đọc và người viết trong khả năng.rb, làm cách nào chúng tôi sử dụng chúng trong các trang xem của chúng tôi? Có vẻ như các tài liệu hiện tại sử dụng một cái gì đó như "<% nếu có thể?: Đọc, @category%> " nhưng điều đó không sử dụng các phương pháp mà chúng tôi đã tách và xác định.
p.s. Chúng tôi sẽ có 7 vai trò khác nhau: khách mời, người đọc, nhà văn, biên tập viên, người quản lý, quản trị và app_admin (nhà phát triển của chúng tôi)
Tôi đã cố gắng giải quyết điều này trong 3 ngày - hãy hiểu rằng tôi vẫn khá một người mới bắt đầu! Cảm ơn trước