2016-08-24 66 views
4

任何人都可以向我解釋這兩個屬性的區別和用例嗎?我很困惑,因爲他們的行爲相似。PrincipalPermission vs授權屬性?

我知道[Authorize]掛接到ASP.NET應用程序生命週期,並在請求到達Controller/Action之前運行。 PrincipalPermission呢?

[PrincipalPermission(SecurityAction.Demand, Role="Admin")] 

而且

[Authorize(Roles="Admin")] 

回答

5

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角色的用戶訪問。

參考

Adding Authorization Rules to Business and Data Layers

ASP.NET 2.0 Security Best Practices

+1

你是說的PrinciplePermission屬性可以控制器/操作方法外使用,但授權屬性不能? – EF0

+0

另外,PrinciplePermission屬性似乎讓你能夠像積極地拒絕某個特定角色一樣(也許我們的方法應該接受所有角色爲'Employee'的用戶的訪問,除了那些角色爲'Temporary'的角色除外)。 – EF0

+0

@EFO是的,根據MSDN,您只能使用控制器或操作方法上的授權屬性。 –