2

編集:簡潔にするために言い直され、単純化された質問...

私のサービス層には次のようなものがあります

GetAllMessages(string userid); 

システムには、クライアント/サプライヤーなど、さまざまなタイプのユーザーがいる可能性があります...

このサービスはすべてのタイプのユーザーのみが利用できますが、選択したユーザーのみが利用できるサービスを実装する最善の方法は何ですか?

DeleteAllMessages(string userid); //client only
NewSupplierMessages(string userid); //supplier

通常、これらのメソッドはMessagesServiceという 1 つのクラスにあります。

注:明確にするために、ユーザーはログオンして認証されていますが、メソッドを次のように記述する必要があるかどうか疑問に思っています。

DeleteAllMessages(ClientUser user); //client only
NewSupplierMessages(SupplierUser userid); //supplier

基本的に、すべてのアクションのユーザーの詳細を取得し、より厳密に型指定された方法でメソッドを呼び出します...

編集2:

私のドメイン層は私の Web アプリとは別のクラス ライブラリにあることに注意してください。「クライアント ユーザー」は「クライアント」の一部になり、同様に「サプライヤー ユーザー」は「サプライヤー」の一部になります。サービスレイヤーを呼び出して正しいコードを呼び出します (つまり、正しい詳細を取得します) - ユーザー ID またはユーザーの厳密に型指定されたクラスを渡す必要があります。サービスにアクセスできるユーザーを表す DTO オブジェクトに制約があることを理解できません。間違っていますか?

そうでなければ、次のようなものがあります。

GetClientDetails();

ユーザーはasp.netによって処理されるため、ユーザーがこのアクションにアクセスできることはわかっていますが、複数のクライアントがある場合はどうなるでしょうか? 確かに、クライアントIDの一部を渡す必要があります/ユーザーIDを渡す場合、そこからクライアントIDを取得できます...

むしろ、上記の署名のようなものを見て、ドメイン層が間違っていると思います...

EDIT 3: 私が考えることができる他の唯一の代替手段は、ユーザーが認証するときに、使用をasp.net mvcアプリケーション内のUserSessionというクラスにグローバル状態として保存し、DI(ninject)を使用してこれをドメインサービスに注入することですレイヤー、したがって、私の署名ができるとき

GetClientDetails();

このインターフェイスを実装するドメイン サービス クラスは次のようになります。

public class ClientService : IClientWorkerService
{

    private ISession _session;
    private IGenericRepo = _repo;
    public ClientService(IUserSession _session, IGenericRepo _repo)
    {
      this._session = _session;
      this._repo = _repo;
    }

    public ClientDetails GetClientDetails()
    {
      var loggedonuser = _session.GetUser();

      if(!loggedonuser.isClient())
        throw new NoAccessException()

      return _repo.Single<Client>(x=> x.ClientID == loggedonuser.ClientID);
    }

}
4

1 に答える 1

1

MSDN: ASP.NET 認証を参照してください。

承認は、ID に特定のリソースへのアクセスを許可する必要があるかどうかを決定します。ASP.NET では、特定のリソースへのアクセスを承認する方法が 2 つあります。

ファイル認証

ファイル認証は、FileAuthorizationModule によって実行されます。.aspx または .asmx ハンドラー ファイルのアクセス制御リスト (ACL) をチェックして、ユーザーがファイルにアクセスできるかどうかを判断します。ACL アクセス許可は、ユーザーの Windows ID (Windows 認証が有効な場合) または ASP.NET プロセスの Windows ID に対して検証されます。詳細については、「ASP.NET の偽装」を参照してください。

URL 承認

URL 承認は、ユーザーとロールを ASP.NET アプリケーションの URL にマップする UrlAuthorizationModule によって実行されます。このモジュールを使用して、特定のユーザーまたはロールに対して、アプリケーションの任意の部分 (通常はディレクトリ) へのアクセスを選択的に許可または拒否できます。

于 2011-06-14T15:27:15.957 に答える