2013-05-24 11 views
5

私はjspページに春のセキュリティを適用しています。私はさまざまな役割を持つユーザーにページのさまざまな部分を表示する必要があります。私のアプローチは正しいのですか?

すべての認証済みユーザーは>>編集および削除し、編集して新しい

匿名を追加>新規

管理者を追加]> [新規

<sec:authorize 
     access="isAuthenticated()"> 
      Code of add new and edit buttons 
</sec:authorize> 

<sec:authorize 
     access="hasAnyRole('ADMIN')"> 
    Code to add new, edit and delete buttons 
</sec:authorize> 

    <sec:authorize 
     access="isAnonymous()"> 
    Code to add new 
    </sec:authorize> 

を追加任意のより容易な方法がある場合、私は、疑問に思ってこの場合、特定のロールのアクセス権を変更したいのであれば、security.xmlファイルのアクセスルールを変更し、ロールアクセスを設定したすべてのページを変更する必要があります。

たとえば、管理者ロールが削除ボタンにアクセスできないようにしたい場合、管理者ロールが削除ボタンを表示するように認証されたすべてのJSPページとsecurity.xmlのコードを変更する必要があります。

これを行う簡単な方法はありますか。

+1

コンポーネントベースのフレームワークでは、ページを複数のコンポーネントに分けて、それぞれのJavaコードパーツのアクセスを定義できます。例:JSF、tapestry –

答えて

1

私はあなたがどこでもあなたのアプリで編集ボタンの同じ権利を持っていることとします。この場合、自動化コードをカスタムタグに取り出すことができます(私はJSP tag filesを推奨します)。すべての権限は、あなたのhasEditPermission.tagに一度宣言されます

<customtags:hasEditPermission> 
    Edit button code goes here 
<customtags:hasEditPermission> 

だから新しいPOWER_USERの役割の場合、あなただけの1ファイルを変更する必要があり、各編集ボタンのためには、カスタムタグを使用します。 :

<%@tag description="Edit permission tag" pageEncoding="UTF-8"%> 
<sec:authorize access="hasAnyRole('ADMIN', 'POWER_USER')"> 
    <jsp:doBody/> 
</sec:authorize> 

"新規追加"と "削除"ボタンでもタグを準備して使用できます。お役に立てれば。

2

私はそこに組み込みのソリューションがないと思います。あなたは、編集ロール、削除ロールのように細分化されたロールシステムを設定することができます。次に、これらの役割をより自由に割り当てることができます。 ユーザーが(管理者とユーザーの役割だけを表示しているように)使いやすいようにするには、役割とユーザーに表示されるタイトルの間のマッピングの背後にある実際の役割を隠す必要があります。

別のアプローチは、アクションに許可されるロールを指定する各アクション(編集、削除など)に対してグローバルパラメータを設定することです。こうすることで、ロールをアプリケーションにハードコードするのではなく、グローバルパラメータを使ってそれらをマッピングすることができます。

他の誰かがより良いアイデアを思いつくのを楽しみにしています。

グローバルパラメータで:

は編集がグローバルパラメータによってマッピングのアプローチを指定する(マッピングは、DBに格納されるだろうが、それがACLを実装するアドホック溶液から得ている洗練されました)私はちょうどrightsMapping.propertiesのような何かを意味しました。このファイルには、あなたがそのような何かにマップします:あなたはこのようなものを使用してJSFページに権利を挿入することができた後

right.edit=ROLE_USER, ROLE_ADMIN 
right.edit=ROLE_ADMIN 
etc... 

を:

<f:loadBundle basename="rightsMapping" var="rights"/> 
.... 
<f:CommandButton name="edit" .... rendered="hasRole(rights.edit)"/> 

これは解決策にどのとても簡単に手でありますDB内のマッピングテーブル、アクセス権を評価するBeanなどを使用して洗練されますが、ファイングレイン権限をロールにマッピングする基本的な考え方は同じです。

+0

グローバルパラメータはどういう意味ですか? – J888

+0

私の答えを – Carsten

2

ロールオブジェクトにコレクションとして含めることができる権利セットを使用して解決策を作成できます。

ボタンを表示するための適切なアクセス権を確認することができます。セキュリティアーキテクチャ内の何かを変更する場合は、関連する役割の権限を許可または取り消すことで簡単に管理できます。

この例は、以下のリンクで確認できます。

http://en.tekstenuitleg.net/blog/spring-security-with-roles-and-rights

+0

更新しました。それぞれの役割ごとに異なるjspファイルを用意して、バックエンドで役割を見つけて、その役割に関連付けられたjspページを表示する必要がありますか? – J888

+0

あなたの役割を権利として定義する必要があります。ユーザードメインクラスには権利のコレクションが含まれている必要があります。役割の定義を権限として指定する場合は、jspの関連オプションを talipkorkmaz

+0

これはメソッドのセキュリティですが、ユーザーが権限を与えられていない場合、jspページにボタンを表示しないでください。 – J888

0

これはあなたのケースでlooking for, with sample code

が何であるかおそらく、あなたはBF_ADD_XXX、BF_EDIT_XXXとBF_DELETE_XXXなど

を持っているでしょうこれは、特定の権限(またはのBFやビジネス機能を取り消す/付与することができますまたは何特定のロールとの間で)コールする必要があります。

関連する問題