Spring Security Coreプラグインがインストールされていて、うまく動作している単純なGrailsアプリがあります。ただし、セキュリティコンテキストでログインしているユーザーの権限を更新することで、この問題に対する解決策は見つかりませんでした。現在のユーザーの詳細(springSecurityService.reauthenticateなど)の更新に関することではありません。Grails Spring Securityプラグイン - ログインしたユーザの権限を変更する
私の問題は次のとおりです。ROLE_ADMINとROLE_USER権限を使用する単純なユーザー管理アプリケーションがあります。今では、2台の管理者が異なるコンピュータから同時に(ROLE_ADMIN権限で)ログインし、1人の管理者が他の管理者の権限をROLE_ADMINからROLE_USERに変更することを決定しました。
変更されたユーザー(新しいROLE_USERロールを持つユーザー)がROLE_ADMINレベルのアクションを実行できないように、そしてすぐにROLE_USERレベルのページにリダイレクトされるように、ユーザーとロールを更新できますか?ログインしているユーザーの権限が変更されたかどうかにかかわらず、すべてのコントローラのアクションで追加のチェックを行う必要がないように、セキュリティコンテキストを更新する方法はありますか?どういうわけか、cahceUsersプロパティを使用できますか?私はcacheUsersを変更していないと私の理解では、デフォルトではfalseです。私が間違っているなら、私を修正してください。
はEDIT:コード 問題を引き起こしているシーケンスが
管理者 "" 管理者 "B" を変更し、管理者のための新たな役割(ROLE_USER)を設定し、 "B"
PersonRole.removeAll(personInstanceB) and PersonRole.create(personInstanceB, roleAdmin)
を呼び出し、すべてが正常に更新されます。同時に、管理者 "B"は権限が変更されたときにすでにログインしています。管理者 "B"は、ログアウトして新しいログインを行うまでROLE_ADMIN制限付きページで作業を続けることができます。権限が更新され、管理者 "B"に新しい役割(ROLE_USER)が割り当てられました
ユーザーが新しい役割で更新されたときに管理者 "B"をROLE_USERページにリダイレクトする/ login
springSecurityService.reauthenticate personInstanceB.username)
を呼び出すと、管理者 "A"が管理者 "B"として「ログイン」し、これが機能しなくなります。
アイデアは大歓迎です。私はここで単純なものを見逃しているかもしれませんが、私はその解決策が何であるか分かりません。
乾杯、これはテストされていませんが、それはあなたのコントローラ/サービスクラスで
試してみる
こんにちは、返信に感謝を。私の質問を投稿する前に、あなたが説明したように私はすでにやっていました。しかし、これは、あなたが管理者で、別の管理者の権限を更新する場合 - >次にspringSecurityService.reauthenticate user.usernameを呼び出すと、変更されたユーザーの資格情報でセッションが更新されることを意味します。つまり、変更したユーザーとして「ログイン」しただけです。私はそれを望んでいない:)私は後で私はそれをより明確にするために自分の投稿を編集します。 – mizzzto
@mizzzto編集を参照してください! – gotomanners
おかげさまで、今とてもうまくいっているようですので、シンプルでしかも非常に強力です! :)しかし、実際には、ユーザーがログインしている間に権限が変更されたことを変更されたユーザーに通知する簡単な方法があるはずです。私はこれの一番下に行く必要があります:) – mizzzto