2012-02-26 30 views
5

Tôi đã cài đặt lập mưu và tạo Users và cũng các quản trị viên sử dụng Lựa chọn 1 từ hướng dẫn này https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-roleID độc đáo giữa người sử dụng và quản trị viên với lập mưu Rails

Bây giờ tôi cần một chút giúp đỡ. Khi thêm Quản trị viên, nó sẽ tạo một bảng khác và tiềm năng phát sinh là quản trị viên và người dùng thông thường có thể có cùng một ID.

Vậy làm cách nào để nhận thông tin từ người dùng và quản trị viên? Ví dụ: tôi muốn hiển thị tất cả người dùng? Tôi có phải đi qua bảng người dùng và sau đó là bảng quản trị viên?

Hoặc nếu tôi hiển thị bài đăng. Làm cách nào để biết bảng nào cần tìm thông tin người dùng hoặc quản trị viên?

Tôi biết tôi chỉ có thể thêm cột vai trò vào bảng người dùng nhưng tôi muốn tránh điều này.

Tôi hy vọng điều này có ý nghĩa haha ​​

Trả lời

12

Tôi khuyên bạn nên sử dụng Bảng thừa kế đơn (STI). Bạn có thể làm các STI bằng cách thêm một cột tên là type với một datatype string trong bảng users và tạo ra một mô hình admin cũng như một mô hình normal_user cả hai mô hình sẽ thừa hưởng từ mô hình user của devise đá quý.

class NormalUser < User 
end 

class Admin < User 
end 

Các loại cột là một từ thuộc mà sẽ tổ chức một giá trị hoặc NormalUser hoặc Admin theo kiểu người dùng mà bạn đã tạo.

Để tạo một admin sử dụng Admin.create(...) và để tạo ra một người dùng thông thường sử dụng NormalUser.create(...) nơi các dấu chấm là các thuộc tính của AdminNormalUser

+0

@ mohammed.magdy tạo ảnh vui nhộn Tôi nghĩ rằng đây là những gì tôi đang tìm kiếm. Bạn có thể giúp tôi trong việc thiết lập mã xác thực thích hợp không. Tôi đang cố gắng sử dụng Rails_Admin vì vậy tôi cần một cách để xác thực quản trị viên. – Dan

+2

Chắc chắn, trong bảng người dùng, bạn đã thêm một cột có tên là kiểu dữ liệu chuỗi. Giá trị của cột kiểu sẽ là Admin hoặc NormalUser (trong trường hợp của chúng ta ở đây). Khi người dùng đăng nhập, bạn có thể lấy kiểu người dùng bằng cách thêm một phương thức trong user.rb để kiểm tra kiểu người dùng đã đăng nhập. Đối với quản trị viên xác định một phương thức có tên là admin? cơ thể sẽ là self.is_a? (Quản trị) điều này sẽ trả về true nếu người dùng đã đăng nhập là quản trị viên khác sẽ trả về false. Tương tự cho NormalUser, trong tập tin user.rb thêm một phương thức có tên def normal_user? phần thân của phương thức sẽ là self.is_a? (NormalUser). – mohamagdy

+0

Để xác thực, tôi khuyên bạn nên sử dụng đá quý cancan nhưng thiết bị sẽ làm việc cho bạn trong cả ủy quyền và xác thực nếu vai trò không quá nhiều. – mohamagdy

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