将参数传递给ASP.NET MVC 6中的需求/策略

Vi1*_*100 7 asp.net-core-mvc asp.net-core

我试图在ASP.NET vNext中创建自定义授权属性,直到我在这篇文章中找到@blowdart的这个优秀答案:

/sf/answers/2202565921/

表明授权要求现在是要走的路.答案非常明确,但没有说明如何将参数传递给此要求/策略.

我要做的是移植具有此签名的MVC 5自定义授权属性:

[Autorizacion(Requires = enumPermission.DeleteCustomer)]
Run Code Online (Sandbox Code Playgroud)

因为我使用在后端/前端镜像的一组非常自定义的权限作为枚举/字符串.

由于这些功能仍然没有记录,我觉得有点迷失......有人可以提供指导吗?

提前致谢

Vli*_*nce 0

事实上,@blowdart\xe2\x80\x99s 的帖子非常有见地,根据我的理解,需要理解的关键如下:

\n\n
\n

授权根据身份行事。身份是通过身份验证创建的。

\n
\n\n

因此,身份似乎是由身份验证过程创建的。

\n\n

然后(如果您愿意)您可以启动授权过程。这意味着创建一个自定义authorization requirements,此要求将查看这些身份并对其采取行动。

\n\n

用简单的英语来说,这就是我相信正在发生的事情:

\n\n
    \n
  1. 正如blowdart\xe2\x80\x99s 帖子中提到的,我们应该有某种\身份验证中间件来恰好执行实际\身份验证。成功通过身份验证后,您可以从现在已通过身份验证的用户那里获取所需的任何信息并创建一个经过身份验证的ClaimsPrincipal.

    \n\n

    例如,我们可以将ClaimsPrincipal用户拥有的权限集存储到其中。

  2. \n
  3. 然后,当您创建您的authorization requirement\n时ClaimsPrincipal,从\n 中提取权限集ClaimsPrincipal,并根据您想要的任何\n业务规则采取适当的操作。

    \n\n

    假设您出于某种原因\xe2\x80\x99t 将权限集存储到 \n 中ClaimsPrincipal,则可以轻松存储 UserId\n 并从需求中读取该 UserId\n ,ClaimsPrincipal调用数据库并获取权限集权限\n然后根据它们采取行动。

  4. \n
\n\n

结论:

\n\n

简而言之,我不认为您将东西传递给了需求,我认为您从ClaimsPrincipal.

\n\n

在您的示例中,您可以创建一个要求,读取ClaimsPrincipal并将任何值与您的值进行比较Enum,然后采取行动。

\n\n

让我们知道您\xe2\x80\x99 已经成功做到了什么以及它是否有效。

\n\n

如果我对此的理解是错误的,那么无论如何,请随时纠正我,因为所有这些都是新东西:-)

\n