2016-05-03 3 views
0

私は、ユーザーが割り当てられた役割に応じてユーザーと対話できるフォームを用意しています。たとえば、私のアプリケーションにはロール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であればtrueisUserを設定します。

<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}"> 

これは私の現在の解決策であり、さまざまな制限付きのロールを追加すると(一部の新しいロールでは特定のフォームフィールドを無効にするなど)、維持するのが面倒になります。フロントエンドのフォームにこれらの制限を適用する、より良い/推奨の方法はありますか?あなたが必要なもの

おかげで、

答えて

0

は、このためにSpring Security Access Control Lists (ACL)です。

これにより、各ロール(ROLE_USER、ROLE_ADMIN)に対して権限(表示、追加、編集、削除)を行うことができます。

あなたのコードでは、ROLEに特定の権限があるかどうかをチェックするだけです。

このように、アプリケーションはROLEに依存しません。

このフレームワークは非常に柔軟性があり、権限を持つユーザーまたはロールによってどのオブジェクトを操作できるかを下位レベルで指定できます。

tutorial

関連する問題