限制某些用户服务的最佳方法是什么

时间:2011-06-14 15:13:45

标签: c# asp.net asp.net-mvc-2 design-patterns domainservices

编辑:重写并简化问题......

在我的服务层中,我有类似

的内容
GetAllMessages(string userid); 

我的系统上可以有各种类型的用户,例如客户/供应商等......

此服务仅适用于所有类型的用户,但实现仅适用于所选用户的服务的最佳方式是,例如。

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

通常,这些方法将在一个名为 MessagesService

的类中

注意:只是为了澄清,用户是登录和验证的,但是我想知道我是否应该这样编写我的方法:

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

基本上为每个操作获取用户的详细信息,并以更强类型的方式调用方法...

编辑2:

注意我的域名图层位于我的网络应用程序的单独的类库中,“客户端用户”将成为“客户端”的一部分,同样“供应商用户”将成为“供应商”的一部分 - 所以如果我想要查询我的服务层并调用正确的代码(即检索正确的详细信息) - 我必须传入用户ID或用户的强类型类,我无法看到如何在代表谁可以访问的DTO对象上有一个约束服务不正确/脆弱?

其他明智的我会有这样的事情:

GetClientDetails();

用户由asp.net处理,因此我们知道用户可以访问此操作,但是如果有多个客户端会怎样?当然,我们必须传递一些客户端ID /如果我要传入用户ID我可以从中获取客户端ID ...

相反,我会说我的域名图层不正确,看到类似上面的签名......

编辑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);
    }

}

1 个答案:

答案 0 :(得分:1)

请参阅MSDN: ASP.NET Authorization

  

授权确定是否   应该授予身份访问权限   具体资源。在ASP.NET中,有   有两种方法可以授权访问   给定资源:

     

文件授权

     

文件   授权由。执行   FileAuthorizationModule。它会检查   .aspx的访问控制列表(ACL)   或.asmx处理程序文件来确定   用户是否应该有权访问   文件。 ACL权限已经过验证   用户的Windows身份(如果   Windows身份验证已启用)或   对于Windows的身份   ASP.NET进程。欲获得更多信息,   请参阅ASP.NET Impersonation。

     

网址授权

     

网址授权   由...执行   UrlAuthorizationModule,用于映射   ASP.NET中的URL的用户和角色   应用。可以使用此模块   有选择地允许或拒绝访问   应用程序的任意部分   (通常是目录)具体   用户或角色。