管理者ユーザーとしてユーザーのパスワードを変更できるようにする必要があります。これは、電話で実行できる手動のパスワードリセット機能のようなものです。Grails Spring Securityプラグインを使用してこれを行うにはどうすればよいですか?これを実現する方法についてのドキュメントを探してみましたが、何も思いつきませんでした。
1197 次
2 に答える
4
@AAの答えは技術的には正しいですが、プラグインは構成ベースである必要があるため、一般的すぎます。クラス名とフィールド名をハードコーディングできるため、実際のコードははるかにコンパクトになります。また、パスワードの更新のみを要求したため、最後の役割の更新は関係ありません。
ユーザークラス名が次のUser
場合、このアクションを使用してユーザー情報を表示します。
def editUserPassword() {
[user: User.get(params.userId)]
}
GSPでフォームを構成して(生成されたものと同様になりますedit.gsp
)、このアクションに投稿します。
def updateUserPassword() {
def user = User.get(params.userId)
user.password = params.newPassword
if (!user.save())
render view: 'editUserPassword', model: [user: user]
return
}
// redirect to the 'success' page or render the user with [user: user]
}
実際に使用しているパラメータ名に変更userId
してくださいnewPassword
于 2012-08-29T20:48:35.957 に答える
1
spring-security-uiプラグインを使用するか、そのソースコードを確認して、次の方法を学ぶことができます。
def update = {
String passwordFieldName = SpringSecurityUtils.securityConfig.userLookup.passwordPropertyName
def user = findById()
if (!user) return
if (!versionCheck('user.label', 'User', user, [user: user])) {
return
}
def oldPassword = user."$passwordFieldName"
user.properties = params
if (params.password && !params.password.equals(oldPassword)) {
String salt = saltSource instanceof NullSaltSource ? null : params.username
user."$passwordFieldName" = springSecurityUiService.encodePassword(params.password, salt)
}
if (!user.save(flush: true)) {
render view: 'edit', model: buildUserModel(user)
return
}
String usernameFieldName = SpringSecurityUtils.securityConfig.userLookup.usernamePropertyName
lookupUserRoleClass().removeAll user
addRoles user
userCache.removeUserFromCache user[usernameFieldName]
flash.message = "${message(code: 'default.updated.message', args: [message(code: 'user.label', default: 'User'), user.id])}"
redirect action: edit, id: user.id
}
于 2012-08-29T20:24:22.860 に答える