Tôi đang làm việc trên ứng dụng Rails 3.2 nơi tôi sử dụng Devise để xác thực. Tôi quyết định thử kế thừa bảng đơn để quản lý vai trò người dùng, nhưng tôi nhanh chóng gặp phải vấn đề. Tôi hiện có ba Mô hình người dùng, User < ActiveRecord
, Admin < User
và Collaborator < User
. Quản trị viên và Cộng tác viên chia sẻ hầu hết các cột Người dùng nhưng chúng có các đặc điểm và đặc quyền hơi khác nhau. Mô hình của tôi hiện nay trông như thế này:Làm cách nào để xử lý xác thực bằng Devise khi sử dụng nhiều mô hình trong Rails 3.2 App
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable, :token_authenticatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :name, :password, :password_confirmation, :remember_me
before_save :ensure_authentication_token
[...]
end
class Admin < User
has_one :account, dependent: :destroy
attr_accessible :account_attributes
accepts_nested_attributes_for :account
end
class Collaborator < User
has_one :account
end
class Account < ActiveRecord::Base
attr_accessible :name
validates_presence_of :name
has_many :projects, dependent: :destroy
has_many :users
end
Các aries vấn đề khi tôi cố gắng để xác thực Admins và cộng tác trong ProjectController của tôi (và các bộ điều khiển khác mà tôi cần chứng thực):
# Causes problem, no one can access anything.
before_filter :authenticate_admin!
before_filter :authenticate_collaborator!
Một vấn đề tương tự như tôi đã với các phương thức trợ giúp của devise cho ví dụ. CURRENT_USER, bây giờ tôi đã current_admin và current_collaborator, tôi "giải quyết" đó bằng cách tạo một trước khi lọc và phương pháp:
def set_current_user
@current_user = current_admin || current_collaborator
end
Có một giải pháp tương tự hoặc đơn giản cho vấn đề xác thực của tôi với lập mưu, hoặc bạn muốn giới thiệu cách tiếp cận khác hơn Đơn Bảng Thừa kế, và đó sẽ là gì?
Mục tiêu của tôi là, 1. khi người dùng mới đăng ký, họ trở thành Quản trị viên, khi họ tạo tài khoản của họ, Mô hình tài khoản cũng được tạo. 2. Người dùng mới (Quản trị viên) có thể mời thêm người dùng vào Tài khoản, đó sẽ là Cộng tác viên. 3. Quản trị viên và Cộng tác viên phải có các đặc quyền khác nhau. Cộng tác viên sẽ không tạo "Tài khoản" mới khi họ đăng ký (công ty có thể là tên tốt hơn cho mô hình Tài khoản của tôi) nên Quản trị viên và Cộng tác viên sẽ cần các biểu mẫu hơi khác nhau để đăng ký và chỉnh sửa.
Cảm ơn.
Cập nhật
tôi kinda "giải quyết" nó bằng cách tạo ra một tương tự trước khi lọc:
def authenticate!
if @current_user == current_admin
:authenticate_admin!
elsif @current_user == current_collaborator
:authenticate_collaborator!
end
end
Gợi ý về các giải pháp có thể thêm thanh lịch vẫn sẽ được đánh giá.
có được một cơ hội để kiểm tra câu trả lời của tôi không? – blnc