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

本文关键字:服务 最佳 方式 是什么 用户 | 更新日期: 2023-09-27 17:59:03

编辑:重新编写并简化问题以供考虑。。。

在我的服务层中,我有一些类似的东西

GetAllMessages(string userid); 

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

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

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

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

注意:为了澄清,用户已经登录并通过了身份验证,但我想知道我是否应该这样写我的方法:

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

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

编辑2:

请注意,我的域层与我的web应用程序在一个单独的类库中,"客户端用户"将是"客户端"的一部分,类似地,"供应商用户"也将是"供应商"的一一部分-因此,如果我想查询我的服务层并调用正确的代码(即检索正确的详细信息)-我必须传入用户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);
    }
}

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

请参阅MSDN:ASP.NET授权

授权决定应授予身份访问特定资源。在ASP.NET中有两种方法可以授权访问给定资源:

文件授权

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

URL授权

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

  • ASP.NET中的身份验证和授权选项概述
  • 构建安全的ASP.NET应用程序:身份验证、授权和安全通信
  • 基于角色的访问控制
  • 自定义基于角色的Web服务访问