私は、ユーザーが割り当てられた役割に応じてユーザーと対話できるフォームを用意しています。たとえば、私のアプリケーションにはロールrole_user
があります。このロールでは、フォームの内容を表示したり、フォームを表示/編集/送信できるロールrole_admin
のロールのみを表示できます。スプリングセキュリティ:ロールを使用してフォームの対話性を制限する
バックエンド(サービス層)は、これらの制限を使用してコードするのはかなり簡単でしたが、サービスクラス/メソッドで@PreAuthorize("hasRole('role_admin')")
を使用すると、変更が自分のフォームに保存されます。たとえば、投稿時にフォームを保存する私のメソッドは、role_admin
ユーザのみがこれを実行することができます。フロントエンド(JSP、JSTLとスプリング形)で
@PreAuthorize("hasRole('role_admin')")
public void saveForm(MyForm myform){
//Save form here
}
iがログインしているユーザーを決定するために変数を設定します。例えば以下のユーザがrole_user
さもなければfalse
であればtrue
にisUser
を設定します。
<security:authorize access="hasRole('ROLE_USER')" var="isUser" />
<security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" />
isUserがtrueの場合、私はそうisAdminのadminClassは、(例えば。下記参照)が真である、私のフォームにuserClassを適用します。私はその後、それぞれの役割に関連するスタイルを適用するためにCSSを使用して、クラス「userClassは」(何を編集できないようにする必要がありrole_users
のために)設定されている場合、すべてのフォームフィールドを無効にするにはJavaScriptを使用
<c:choose>
<c:when test='${isAdmin}'>
<c:set var="roleClass" value="adminClass"/>
</c:when>
<c:when test='${isUser}'>
<c:set var="roleClass" value="userClass"/>
</c:when>
<c:otherwise>
<c:set var="roleClass" value="userClass"/>
</c:otherwise>
</c:choose>
<form:form class="${roleClass}">
。
これは私の現在の解決策であり、さまざまな制限付きのロールを追加すると(一部の新しいロールでは特定のフォームフィールドを無効にするなど)、維持するのが面倒になります。フロントエンドのフォームにこれらの制限を適用する、より良い/推奨の方法はありますか?あなたが必要なもの
おかげで、