使用多个自定义授权属性

Using more than one Custom Authorize Attribute

我正在开展一个项目,我们正在加强网站区域(模块)内的安全性。我们总共有 5 个模块,所有 5 个模块当前共享相同的自定义授权属性 class 进行三项检查。

  1. 您是否同意接受条款?是,继续执行 2。否,您未获得授权并被抛至未授权页面。
  2. 您是网站的会员吗?是,继续执行 3。否,您未经授权并被抛至未经授权的页面。
  3. 您的角色是否允许在此模块中使用?是的,继续前进。不,您未经授权并被抛至未经授权的页面。

当前 5 个模块的 classes 由此自定义授权属性修饰,并检查了它们的单独角色(3/5 模块具有一个单独的角色,而另外 2 个模块具有多个,具有一个有 4 个,而我发布的那个现在有 3 个)。然而,随着我们在 1 个模块中加强安全性,如何去做就成了一个问题。我们要更改的这个模块有 3 个角色(只读、用户、管理员)。

用户也是一个特例,因为它有一套辅助检查,其中包括检查最多 2 个其他列表中的权限(始终检查两个列表中的一个,而另一个用于一个 select 面积).

我的问题是,由于此安全性在原始自定义授权属性之外并取决于此模块,我应该创建一个新的自定义授权属性,还是应该修改原始属性?

我最初的想法是删除此模块的 class 宽装饰,而是将其应用于每个方法。走这条路更有助于将新逻辑添加到当前的自定义授权属性。

但是,这里有一个问题。为管理员和只读用户执行此操作效果很好,但问题出在用户案例上。用户必须进行二次检查以查看他们是否有权访问他们将要查看的特定记录。如果他们不这样做,他们将像只读用户一样被允许在那里,但不能编辑。

由于该条款,我有点不确定是否有一个私有方法来检查自定义授权属性。

任何方向或想法将不胜感激。谢谢。

经过深思熟虑,我想出了以下解决方案。我没有添加到我拥有的当前自定义授权属性中,因为这仅适用于站点内的一个模块。

但是,我会 运行 检查用户可以点击的所有页面(除了 Post 方法)以确定所有情况。

当用户是管理员时,他们将获得修改权限。当他们是 Read-Only 用户时,他们没有修改权限。当他们是用户时,也会检查他们的权限,如果他们有这些权限,他们将获得修改访问权限。否则,他们将被视为 Read-Only 用户。

我在会话中存储了用户的角​​色和权限,以及他们是否具有修改访问权限。如果找不到会话,我会返回并重新添加它们。如果用户的 Roles/Permissions 在用户管理区域中更新,我也会更新杀死这些会话。

此外,在修改某些内容的页面 (Add/Edit/Delete) 中,我添加了一大块逻辑,如果他们没有修改访问权限,他们将被引导到未经授权的访问页面。

到目前为止,这似乎运作良好并且到目前为止没有任何问题。我宁愿将此逻辑添加到一个地方,例如自定义授权属性 class,但与此同时,我认为将它放在那里是不合适的,因为它仅用于一个模块。谢谢。