[英]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.