Tôi đang làm việc trên ứng dụng web Rails và hiện đang được một số 20 người dùng sử dụng.Cách tốt nhất để thực hiện ủy quyền chi tiết cho một ứng dụng web là gì?
Một số phần của ứng dụng chỉ có thể truy cập được bởi một số người dùng, vì vậy chúng tôi đã có khung ủy quyền cơ bản tại chỗ, mà tôi đã triển khai bằng plugin actions_as_authenticated.
Đặc quyền của người dùng tùy thuộc vào bộ phận họ làm việc, ví dụ quản trị có quyền truy cập vào tất cả các phần của ứng dụng, trong khi kế toán chỉ có quyền truy cập vào các phần liên quan đến kế toán. các bộ phận, vv ..
Mặt khác, người dùng sẽ thấy các liên kết đến các hành động mà họ không có đủ đặc quyền. Ví dụ, những người trong bộ phận bán hàng nhìn thấy một liên kết đến các hồ sơ tài chính trong menu chính, nhưng khi họ nhấp vào nó, không có gì xảy ra. Điều này là do AFAIK không có cách hiệu quả để truy vấn các đặc quyền của người dùng bằng cách sử dụng behavior_as_authenticated.
Tôi muốn thay đổi điều này bằng hai cách:
tôi muốn giới thiệu nhiều uỷ quyền hạt mịn. Hiện tại, việc cấp phép được thực hiện ở cấp độ bộ điều khiển. Tôi muốn làm điều này ở cấp độ hành động hoặc mô hình. Ví dụ, tôi muốn những người trong bộ phận bán hàng có thể tạo và cập nhật các khoản thanh toán, nhưng không xóa chúng.
Tôi muốn có thể truy vấn các đặc quyền của người dùng một cách hiệu quả, vì vậy tôi có thể xóa các liên kết không cần thiết (và khó hiểu) khỏi giao diện.
Bạn nghĩ cách nào là cách thanh lịch nhất để triển khai tính năng này?
Câu trả lời dành riêng cho đường ray là không cần thiết, tôi chỉ muốn biết cách thực hiện điều này trong ứng dụng hướng dữ liệu.
Cuối cùng, dưới đây là cách nó hiện đang thực hiện:
def authorized?
current_user.role.foo? or current_user.role.bar?
end
Và đây là ý tưởng ban đầu của tôi, mà tôi nghĩ không phải là cách tốt nhất để giải quyết việc này:
+------------+------------+---------+ | department | controller | action | +------------+------------+---------+ | accounting | payments | index | | accounting | payments | new | | accounting | payments | create | | accounting | payments | edit | | accounting | payments | update | | accounting | payments | destroy | | sales | payments | new | | sales | payments | create | | sales | payments | edit | | sales | payments | update | +------------+------------+---------+
hoặc
+------------+----------+-------+--------+------+--------+--------+ | department | model | list | create | read | update | delete | +------------+----------+-------+--------+------+--------+--------+ | accounting | payments | TRUE | TRUE | TRUE | TRUE | TRUE | | sales | payments | FALSE | TRUE | TRUE | TRUE | FALSE | +------------+----------+-------+--------+------+--------+--------+
Tôi đã có bảng bộ phận và bảng users_departments. Tôi đơn giản hóa bảng ví dụ cho ngắn gọn. –