在我的Asp.NET Core WebApi应用中,我想给ViewModel中的属性添加权限,然后自定义一个ActionFilter来过滤respone值。如果用户没有权限,该属性将被替换为回调值。 现在,我想使用授权策略来检查权限。
如何获取我在 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);
}
}
}
或者是否有任何其他方式在 View 模型的属性中实现权限?
最佳答案
我认为这是不可能的。策略存储在私有(private)字段中。 See source .但是,我不明白为什么您需要所有政策?如果将策略名称存储在 PropertyPermissionAttribute
中,则可以从 IAuthorizationPolicyProvider.GetPolicyAsync(string policyName)
获取必要的策略。
关于c# - 如何获取我在 Asp.Net 核心的 Startup.ConfigureServices 中添加的所有授权策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45014894/