任何人都可以向我解釋這兩個屬性的區別和用例嗎?我很困惑,因爲他們的行爲相似。PrincipalPermission vs授權屬性?
我知道[Authorize]掛接到ASP.NET應用程序生命週期,並在請求到達Controller/Action之前運行。 PrincipalPermission呢?
[PrincipalPermission(SecurityAction.Demand, Role="Admin")]
而且
[Authorize(Roles="Admin")]
任何人都可以向我解釋這兩個屬性的區別和用例嗎?我很困惑,因爲他們的行爲相似。PrincipalPermission vs授權屬性?
我知道[Authorize]掛接到ASP.NET應用程序生命週期,並在請求到達Controller/Action之前運行。 PrincipalPermission呢?
[PrincipalPermission(SecurityAction.Demand, Role="Admin")]
而且
[Authorize(Roles="Admin")]
Authorize
屬性用於specifiy訪問限制給控制器或操作方法。換句話說,您可以授予或拒絕用戶/角色訪問權限,以訪問網站中的單個頁面或URL。
當您在ASP.NET應用程序中對用戶進行身份驗證時,身份驗證用戶的身份將自動在服務器上的該用戶請求中流動。
您可以通過PrincipalPermission
屬性在業務類別上使用此身份信息。用PrincipalPermission
你可以授權用戶的能力。例如,您可以阻止用戶實例化類或訪問業務類中的方法。
這可以很容易地將乾淨的安全授權規則添加到您的業務層和數據層。
using System;
using System.Security.Permissions;
[PrincipalPermission(SecurityAction.Demand, Authenticated = true)]
public class EmployeeManager
{
[PrincipalPermission(SecurityAction.Demand, Role = "Manager")]
public Employee LookupEmployee(int employeeID)
{
// todo
}
[PrincipalPermission(SecurityAction.Demand, Role = "HR")]
public void AddEmployee(Employee e)
{
// todo
}
}
例如,使用PrincipalPermission
屬性,
EmployeeManager
類只能由授權用戶進行實例化。LookupEmployee
方法只能由具有Manager
角色的用戶訪問。參考
你是說的PrinciplePermission屬性可以控制器/操作方法外使用,但授權屬性不能? – EF0
另外,PrinciplePermission屬性似乎讓你能夠像積極地拒絕某個特定角色一樣(也許我們的方法應該接受所有角色爲'Employee'的用戶的訪問,除了那些角色爲'Temporary'的角色除外)。 – EF0
@EFO是的,根據MSDN,您只能使用控制器或操作方法上的授權屬性。 –