【问题标题】:Resource Based authorization for a list of reosurces?资源列表的基于资源的授权?
【发布时间】:2023-03-25 16:46:01
【问题描述】:

如何对资源列表实施授权?

我看到的所有文档都基于 IAuthorizationService 和 AuthorizeAsync 方法。但这仅适用于一种资源。

我是否应该检索所有资源,然后强制检查用户是否有权使用 IAuthorizationService 的 AuthorizeAsync 方法?这似乎非常不合时宜、缓慢且无能。

你会怎么做?

【问题讨论】:

    标签: asp.net-core .net-core asp.net-core-webapi asp.net-authorization


    【解决方案1】:

    我已经在我的几个项目中实现了这一点,除了从数据库中获取所有资源然后对每个资源执行 AuthorizeAsync 之外,您可以做的事情并不多(据我所知)。

    在某些情况下,您可以在存储 resourceId/userId 的数据库中拥有映射表并据此进行检查。以这种方式获取项目更容易,无需对每个项目执行 AuthorizeAsync,但它并不适用于每个场景......

    关于这个主题有几个问题(例如https://github.com/dotnet/AspNetCore.Docs/issues/10244)但没有解决方案。

    【讨论】:

    • 是的,我看到了这些问题。所以,最后,似乎最好尝试为此构建 quer 过滤器,你不觉得吗?将一些基本过滤器添加到可查询的检索中,最终用户应该看到什么。这是解决问题的好方法吗?
    • 如果可能的话,我可能会将该方法用于查询过滤器。在某些情况下(当您必须使用声明时)这是不可能的。但是,如果您在数据库中有映射(resourceId/userId 或 resourceId/roleId),那么在这种情况下 imo 是更好的方法。
    猜你喜欢
    • 1970-01-01
    • 2013-09-22
    • 2021-08-31
    • 2019-07-18
    • 2014-09-12
    • 2020-06-18
    • 2012-11-18
    • 2015-03-23
    • 2019-04-15
    相关资源
    最近更新 更多