我有一個3層的MVC解決方案:MVC的Web - 業務層 - 數據訪問層MVC 5 Windows身份驗證在AuthorizeAttribute和服務層
我有用戶和組數據庫後端的自定義表,則用戶組映射到自定義權限結構。身份驗證需要檢查用戶的存在,授權需要根據用戶的權限驗證用戶可以執行的操作。
我可以通過實現一個自定義的AuthorizeAttribute並詢問服務級別是否存在用戶表中的HttpContext.User.Identity.Name,並根據控制器和操作驗證用戶權限,從而執行身份驗證和授權。
但是,服務級別需要在從控制器中的操作調用時再次授權用戶。這可以更好地控制用戶可以做什麼和不可以做什麼 - 例如,根據用戶組成員資格,有些字段是隻讀或隱藏的。
問題是,我將最終在控制器操作的AuthorizeAttribute和控制器操作本身(通過服務級別)內對用戶進行身份驗證和授權。
這是一個比其他任何事情都要多的設計問題,但是想要看看我是否正以最佳方式接近問題!
感謝您的回答@himanshu。目前服務層是一個緊密耦合的dll(即沒有接口的直接項目引用)。身份驗證是Windows身份驗證,用戶名作爲方法參數傳遞給服務層。將來我會想要抽象這個服務層。我的問題是,我將複製授權,因爲我將在AuthorizeAttirbute中執行操作,然後再次在服務層中執行操作。 – sjr