0

私は、次のようなモデルを持つ Play フレームワーク アプリケーションを持ってCompanyUserます。

、 などhttp://www.example.com/companies/1234の URL があります。数字はユーザー ID ではなく、企業 ID です。http://www.example.com/companies/1234/departmentshttp://www.example.com/companies/1234/departments/employees

通常のユーザー (管理者ではない) は、自分のプロフィール ページにのみアクセスでき、他のユーザーのプロフィール ページにはアクセスできないようにしたいと考えています。したがって、ID 1234 の会社に関連付けられているユーザーは、URL にアクセスできないはずです。 http://www.example.com/companies/6789

リクエストパラメータ「id」をオーバーライドSecure.check()して、ログインしているユーザーに関連付けられている会社の ID と比較することで、これを達成しようとしました。ただし、パラメーターが「id」以外で呼び出された場合、これは明らかに失敗します。

これをどのように達成できるか知っている人はいますか?

4

2 に答える 2

1

単純な @Before 関数を使用することも、セキュリティを適用するのがビュー ページのみの場合は、ユーザーの ID をチェックする単純なコードを最初に追加することもできます (セッションからだと思います)。 、セッション内の ID から User フォームを取得し、渡された ID から Company を取得し、相互にチェックすることにより、ページへのアクセスが許可されていることを確認します。

セキュリティが失敗した場合は、render の代わりに badrequest を返すか、notAuthorized カスタム ページを表示するアクションを呼び出します。

于 2012-05-31T14:55:16.753 に答える
0

Controllerを拡張するSecureProfileControllerクラスを作成し、ユーザーのcompanyIdに対して表示されるcheckCompanyIdを実行するメソッドを作成し、そのロジックを必要とするコントローラーにSecureControllerを拡張させることができます。

Codemwnciが言うように、メソッドが@Before関数である場合、継承されたクラスのすべてのアクションメソッドをインターセプトできます。

または、Deadboltを参照して、ユーザーの役割を設定し、それらの役割に基づいてアクセスを制限することもできます:http ://www.playframework.org/modules/deadbolt-1.0/home

お役に立てば幸いです:)

于 2012-06-01T17:55:39.903 に答える