PrincipalPermission与授权属性?

时间:2016-08-24 08:50:26

标签: c# attributes authorize-attribute principalpermission

有人可以向我解释这两个属性的差异和用例吗?我很困惑,因为他们的行为相似。

我知道[Authorize]挂钩到ASP.NET应用程序生命周期并在请求到达Controller / Action之前运行。 PrincipalPermission怎么样?

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

[Authorize(Roles="Admin")]

1 个答案:

答案 0 :(得分:7)

Authorize属性用于指定对控制器或操作方法的访问限制。换句话说,您可以授予或拒绝用户/角色访问权限,以访问站点中的各个页面或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