Tôi có một ứng dụng Grails đơn giản với plugin Spring Security Core được cài đặt và hoạt động tốt. Tuy nhiên, tôi đã không tìm thấy bất kỳ giải pháp nào cho vấn đề với việc cập nhật quyền hạn của người dùng đã đăng nhập trong ngữ cảnh bảo mật. Tôi không nói về việc cập nhật chi tiết của người dùng hiện tại (nghĩa là springSecurityService.reauthenticate).Plugin Grails Spring Security - sửa đổi quyền truy cập đăng nhập của người dùng
Vấn đề của tôi là: Tôi có một ứng dụng quản lý người dùng đơn giản với các quyền hạn ROLE_ADMIN và ROLE_USER được sử dụng. Bây giờ, tôi có 2 quản trị viên đăng nhập cùng một lúc (với quyền hạn ROLE_ADMIN) từ các máy tính khác nhau và một quản trị viên quyết định thay đổi thẩm quyền của quản trị viên khác từ ROLE_ADMIN thành ROLE_USER.
Làm cách nào để cập nhật người dùng và vai trò để người dùng được sửa đổi (với vai trò ROLE_USER mới) không thể thực hiện bất kỳ hành động cấp ROLE_ADMIN nào và được chuyển hướng đến các trang cấp ROLE_USER ngay lập tức? Có cách nào để cập nhật bối cảnh bảo mật vì vậy tôi không phải thực hiện kiểm tra bổ sung trong tất cả các hành động của bộ điều khiển liệu các quyền của người dùng đã đăng nhập đã bị thay đổi chưa? Tôi có thể sử dụng tài sản cahceUsers cho điều đó không? Tôi đã không sửa đổi cacheUsers và trong sự hiểu biết của tôi, nó là false theo mặc định. Nêu tôi sai vui long chân chỉnh tôi.
EDIT: Trình tự đó là gây ra vấn đề là
Administrator "A" sẽ thay đổi quản trị "B" và đặt ra một vai trò mới (ROLE_USER) cho quản trị viên "B"
mã gọi
PersonRole.removeAll(personInstanceB) and PersonRole.create(personInstanceB, roleAdmin)
và mọi thứ được cập nhật thường làđồng thời Quản trị viên "B" đã được đăng nhập khi quyền lực của họ được sửa đổi. Quản trị viên "B" có thể tiếp tục làm việc trên các trang bị hạn chế ROLE_ADMIN cho đến khi họ đăng xuất và đăng nhập mới. Chỉ khi đó chính quyền mới được cập nhật và Quản trị viên "B" có vai trò mới (ROLE_USER)
Tôi muốn Quản trị viên "B" được chuyển hướng đến trang ROLE_USER khi người dùng được cập nhật vai trò mới và không chỉ sau khi đăng xuất/login
gọi
springSecurityService.reauthenticate personInstanceB.username)
khiến Quản trị viên "A" được "đăng nhập" làm Quản trị viên "B" để điều này không hoạt động.
Bất kỳ ý tưởng nào cũng sẽ được hoan nghênh. Tôi có thể đã bỏ lỡ một cái gì đó đơn giản ở đây nhưng tôi không có ý tưởng những gì các giải pháp sẽ được.
Chúc mừng, mizzzto
Hi, cảm ơn bạn đã trả lời. Trước khi đăng câu hỏi của tôi, tôi đã làm như bạn đã mô tả. Tuy nhiên, điều này có nghĩa rằng nếu bạn là quản trị viên và bạn cập nhật quyền quản trị của một quản trị viên khác -> thì hãy gọi springSecurityService.reauthenticate user.username sẽ khiến phiên được cập nhật với thông tin đăng nhập của người dùng đã sửa đổi. Và điều đó có nghĩa là bạn đã "đăng nhập" với tư cách là người dùng bạn đã sửa đổi. Tôi không muốn điều đó :) Tôi sẽ chỉnh sửa bài đăng của mình để làm rõ hơn về những gì tôi đang theo dõi. – mizzzto
@mizzzto xem EDIT! – gotomanners
cảm ơn rất nhiều, dường như đang hoạt động tốt, rất đơn giản nhưng rất mạnh mẽ! :) Mặc dù, có thực sự cần phải có một số cách dễ dàng hơn để thông báo cho người dùng sửa đổi rằng chính quyền của họ đã được thay đổi trong khi người dùng đăng nhập. Tôi cần phải nhận được để dưới cùng này :) – mizzzto