Chúng tôi đang phát triển một ứng dụng (sử dụng Grails Spring Security (trước đây là Acegi)), trong đó chúng tôi sẽ có hàng ngàn người dùng trải rộng 10-15 loại người dùng kín đáo. Trong hệ thống hiện tại, mỗi loại người dùng tương đương với một "nhóm", và các vai trò và quyền cụ thể được gắn với nhóm. Người dùng nhận được tất cả "vai trò" của họ từ nhóm.Spring Security (Acegi) và Nhóm người dùng (so với vai trò)
Ví dụ, chúng ta có thể có hai nhóm người dùng:
CLOWN: vai trò = ride_clown_car, toot_horn, receive_applause ACROBAT: vai trò = do_flip, walk_tightrope, receive_applause
Chúng tôi có ba người, một giao cho Nhóm CLOWN, một nhóm được gán cho nhóm ACROBAT và một nhóm được gán cho cả hai (có sự kết hợp giữa các vai trò CLOWN và ACROBAT).
Nếu chúng tôi thay đổi quyền, chúng tôi sẽ làm như vậy ở cấp nhóm. Ví dụ, nếu chúng ta thêm quyền swing_on_trapeze vào nhóm ACROBAT, tất cả các nhào lộn sẽ tự động kế thừa nó.
Trong điều khoản Grails, quyền trên bộ điều khiển sẽ vẫn ở cấp vai trò. Vì vậy, một hành động với @Secured (['toot_horn']) sẽ cho phép người dùng trong nhóm CLOWN nhưng không cho phép trong nhóm ACROBAT. @Secured (['receive_applause']) sẽ cho phép cả CLOWNS và ACROBATS.
Làm cách nào để thực hiện điều này trong Spring Security vì bản chất hai tầng của mô hình (người dùng, vai trò)? Tôi có cần triển khai xác thực tùy chỉnh của riêng mình để thu thập vai trò dựa trên các nhóm không?
Cảm ơn!
Tôi đang thực hiện một cái gì đó rất giống với của bạn. Làm thế nào để bạn thiết lập "grails.plugin.springsecurity.userLookup.authorityJoinClassName" trong trường hợp của bạn? Trong một hệ thống hai cấp, điều này chỉ có thể trỏ đến cấp độ đầu tiên (nhóm người dùng) mà không xác định vai trò/quyền hạn thực tế. – sola