【问题标题】:PrincipalPermission vs Authorize Attribute?PrincipalPermission 与 Authorize 属性?
【发布时间】:2016-08-24 08:50:26
【问题描述】:

谁能向我解释这两个属性的区别和用例?我很困惑,因为它们的行为相似。

我知道 [Authorize] 挂钩到 ASP.NET 应用程序生命周期并在请求到达控制器/操作之前运行。 PrincipalPermission 呢?

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

[Authorize(Roles="Admin")]

【问题讨论】:

    标签: c# attributes authorize-attribute principalpermission


    【解决方案1】:

    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

    【讨论】:

    • 你是说 PrinciplePermission 属性可以在控制器/动作方法之外使用,但 Authorize 属性不能?
    • 此外,PrinciplePermission 属性似乎也使您能够执行诸如主动拒绝特定角色之类的操作(也许我们的方法应该接受具有角色“员工”的所有用户的访问权限,除了那些也拥有角色“临时”)。
    • @EFO 是的,根据 MSDN,您只能在控制器或操作方法上使用 Authorize 属性。
    猜你喜欢
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多