0

皆さん、私はこの問題に関するたくさんの投稿を読みましたが、まだここに光が見えませんでした.

コントローラーのようにビューで何かを実行/実行または表示する許可を求めるのは非常に簡単ですが、モデルでそれを行うのはより複雑です.少なくとも私に起こったことです. コントローラーで、セッションオブジェクトに簡単にアクセスできるため: HttpContext.Current.Session["UserPermissions"] ビューから、セッションマネージャーを使用して次のようにアクセスできます: SessionManager.IsAllowed(Permission.SuperUser) そしてそれもコントローラで構築されます。しかし、データベースに接続するモデルとビジネス層でそれを簡単に行うにはどうすればよいでしょうか?

これは私の例です-

データベースから情報を取得し、ユーザーのアクセス許可に基づいて情報を取得する必要がある場合、ユーザーがアクセスできないことがわかっているデータでオブジェクトを埋めたくありません。

ビュー内のオブジェクトを解析して、ユーザーが見ることを許可されているアイテムだけを表示するのは簡単ですが、ビューに表示する前にこのアイテムをフィルタリングするほうがよいのではないでしょうか?

パーミッション クラスを実装して、すべてのモデルで使用する例を誰かに見せてもらえますか?

ありがとう!

4

1 に答える 1

0

私は通常、モデル内にある CurrentUser クラスを使用して、権限、ユーザー ID、名前、電子メール アドレスなどのすべての重要なユーザー属性を追跡します。クラスをモデル内に保持すると、アプリケーションによっては、アクセス許可チェックの大部分が発生する可能性があるコントローラーに簡単にアクセスできます。これにより、CurrentUser モデルをビュー モデルとしてビューに渡すこともできます。

ユーザーが CurrentUser クラスで現在持っているロールに基づいてビュー内の項目を制限し、必要な場合にのみ CurrentUser オブジェクトをビューに渡します。CurrentUser クラスは、アプリケーションの開始時にインスタンス化され、必要に応じて更新できます。私が取り組んでいる現在のアプリケーションでは、ユーザーの役割をかなり頻繁に更新する必要があります。

ロールが CurrentUser オブジェクト内に保持されている場合、コントローラーとモデルのユーザー権限を簡単に確認できます。次のようなメソッドを実装します (MVC Simple Membership Provider を使用):

bool IsUserInRole(string roleName) {
    if (currentUser != null)
        {
            return currentUser.Roles.Contains(roleName);
        }
}

現在 MVC のどの部分にいるかに関係なく、現在の役割を確認することができます。

CurrentUser をデータ抽象化レイヤー (データベースの上にあるレイヤー) に渡すことはお勧めしません。代わりに、アクセス要件をパラメーターとして渡すか、ロールごとに個別のメソッドを実装する方法でメソッドを実装します。使用している可能性があります。

于 2013-03-28T02:20:21.420 に答える