【问题标题】:Is it possible to access controller parameters when overriding ClaimsAuthorizationManager?覆盖 ClaimsAuthorizationManager 时是否可以访问控制器参数?
【发布时间】:2016-01-12 14:00:37
【问题描述】:

我创建了自己的 AuthorizationManager : ClaimsAuthorizationManager 来帮助授权。我正在使用开箱即用的属性 ClaimsPrinciplePermission。

[ClaimsPrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Operation="Show", Resource="Account")]
public ActionResult Index(int? id)

问题/问题,我想从我的公共覆盖 bool CheckAccess(AuthorizationContext context) 方法中获取控制器参数 id。这可能吗?

我需要根据 CheckAccess 中的参数 id 做逻辑。这可能吗?

【问题讨论】:

    标签: .net asp.net-mvc asp.net-mvc-4 c#-4.0 claims-based-identity


    【解决方案1】:

    我想你可以直接从

    访问这个参数
    context.HttpContext.Request.Params["id"]
    

    context.Controller.ValueProvider.GetValue("id")
    

    【讨论】:

    • 不幸的是,在 AuthorizationContext 类型的 CheckAccess 方法上下文中,HttpContext 不是 .即 AuthorizationContext 不包含 HttpContext 的定义
    • 创建这样的Manager的主要目标是什么?
    • 我正在使用开箱即用的 ClaimsPrinciplePermission 属性并标识了操作/资源,但是用户对该特定方法的访问特定于传递给该方法的 id。即用户可以根据传入的 id 进行访问。因此,我需要在自定义 AuthorizationManager 中获取控制器方法参数 id:ClaimsAuthorizationManager。我可以获取操作、资源,但不能获取使用的参数。
    • 如果这只是根据角色或帐户权限过滤用户,您应该覆盖现有解决方案:身份验证过滤器。
    • 这是更多的授权而不是身份验证。此外,我使用 ClaimsPrincipalPermission 属性来指定资源/操作。使用此属性以添加自定义授权,您可以创建自己的授权管理器并从开箱即用的 AuthorizationManager 派生
    猜你喜欢
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2013-06-03
    • 2012-09-25
    • 2016-02-02
    • 1970-01-01
    相关资源
    最近更新 更多