[英]what is the best way to restrict services for certain users
编辑:改写和简化的问题要简洁......
在我的服务层中,我有类似的东西
GetAllMessages(string userid);
我的系统上可以有各种类型的用户,例如客户/供应商等...
此服务仅适用于所有类型的用户,但是实现仅对选定用户可用的服务的最佳方式是什么,例如
DeleteAllMessages(string userid); //client only
NewSupplierMessages(string userid); //supplier
通常,这些方法将在一个名为MessagesService的 class 中
注意:为了澄清,用户已登录并经过身份验证,但是我想知道我是否应该这样编写我的方法:
DeleteAllMessages(ClientUser user); //client only
NewSupplierMessages(SupplierUser userid); //supplier
基本上获取每个操作的用户详细信息,并以更强类型的方式调用方法......
编辑2:
请注意,我的域层位于我的 web 应用程序的单独 class 库中,“客户用户”将成为“客户”的一部分,同样,“供应商用户”将成为“供应商”的一部分 - 所以如果我想查询我的服务层并调用正确的代码(即检索正确的详细信息) - 我必须传入用户 id 或用户的强类型 class,我看不到 DTO object 上的约束如何表示谁可以访问服务不正确/易碎?
否则我会有这样的事情:
GetClientDetails();
用户由 asp.net 处理,所以我们知道用户可以访问此操作,但是如果有多个客户端怎么办? 当然,我们必须传入一些客户端 ID/如果我要传入用户 ID,我可以从中获取客户端 ID...
相反,我会说我的域层不正确,看到类似上面的签名......
(编辑 3:我能想到的唯一其他选择是,当用户进行身份验证时,将使用存储在 asp.net mvc 应用程序中名为 UserSession 的 class 中,作为全局 Z9ED39E2EA931586B6A985A6942EF57ject 使用此域服务注入到 my domain layer,然后注入因此,当我的签名可以
GetClientDetails();
实现此接口的域服务 class 可以是:
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);
}
}
授权确定是否应授予身份访问特定资源的权限。 在 ASP.NET 中,有两种方法可以授权对给定资源的访问:
文件授权
文件授权由 FileAuthorizationModule 执行。 它检查 .aspx 或 .asmx 处理程序文件的访问控制列表 (ACL) 以确定用户是否应该有权访问该文件。 针对用户的 Windows 身份(如果启用了 Windows 身份验证)或 Z9E0DAZ3438E1E38AB8 进程的 Windows 身份验证 ACL 权限。 有关详细信息,请参阅 ASP.NET 模拟。
URL授权
URL 授权由 UrlAuthorizationModule 执行,它将用户和角色映射到 ASP.NET 应用程序中的 URL。 该模块可用于选择性地允许或拒绝特定用户或角色对应用程序的任意部分(通常是目录)的访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.