【问题标题】:How to get all Authorize Policies that I added in the Startup.ConfigureServices in Asp.Net core?如何获取我在 Asp.Net 核心的 Startup.ConfigureServices 中添加的所有授权策略?
【发布时间】:2017-12-14 08:32:47
【问题描述】:

在我的 Asp.NET Core WebApi 应用程序中,我想给 ViewModel 中的属性添加权限,然后自定义一个 ActionFilter 来过滤响应值。如果用户没有权限,该属性将被一个回调值替换。 现在,我想使用授权策略来检查权限。

如何获取我在 Startup.ConfigureServices 中添加的所有授权策略?

    public void OnActionExecuted(ActionExecutedContext context)
    {
        if (!(context.Result is JsonResult)) return;
        var c = (JsonResult)context.Result;
        var pas = c.Value
              .GetType().GetTypeInfo()
              .GetProperties()
              .Where(p => p.GetCustomAttribute<PropertyPermissionAttribute>() != null)
              .Select(p =>
                {
                    var attr = p.GetCustomAttribute<PropertyPermissionAttribute>();
                    return (p, attr);
                });

        // ** How to Get All Policies ?? **


        foreach (var (p, a) in pas)
        {
            // Check Policies

            var cb = a.CallbackValue;
            if (cb!=null && p.PropertyType == cb.GetType())
            {
                p.SetValue(c.Value, cb);
            }
            else
            {
                p.SetValue(c.Value, null);
            }
        }
    }

或者是否有任何其他方式在 viewmodel 的属性中实现权限?

【问题讨论】:

    标签: c# asp.net asp.net-core asp.net-identity asp.net-core-webapi


    【解决方案1】:

    我认为这是不可能的。策略存储在私有字段中。 See source。但是,我不明白您为什么需要所有策略?如果您将策略名称存储在PropertyPermissionAttribute 中,则可以从IAuthorizationPolicyProvider.GetPolicyAsync(string policyName) 获取必要的策略。

    【讨论】:

    • 谢谢,就是这样!但是如何通过策略检查用户?
    • 可能是因为他想要获取所有可用策略的列表,以便站点管理员通过视图配置用户。这至少是我想做的。我在 AspNetUserClaims 中确实有匹配的数据库条目,但查询那些存在并没有给你所有潜在声明/策略的列表。
    • 你最后做了什么?这正是我想要做的,在“角色权限”管理面板中列出策略,以便管理员可以动态创建角色并关联策略。就我而言,每项政策都有一个角色声明。我唯一缺少的是一种按策略名称显示每个策略的方法。我可以将它们保存在静态类中,但这似乎是重复的..
    • 我最终做了一个相对脆弱的扩展,使用 addPolicyEx 转发到 addPolicy,但也记录策略以供以后检查。对于仪表板案例,它起作用了。
    猜你喜欢
    • 2018-02-20
    • 2021-05-27
    • 2021-03-28
    • 2020-06-17
    • 1970-01-01
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多