0

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

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

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

  • 只读:听起来是这样。没有添加/编辑/删除权限。
  • 用户:具有读取权限并且可以添加/编辑/删除等待其他权限检查。
  • 管理员:随你便。您可以添加/编辑/删除并进入仅限管理员区域。

用户也是一个特殊情况,因为它有一组辅助检查,其中包括检查最多 2 个其他列表中的权限(始终检查两个列表中的一个,而另一个用于一个选择区域)。

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

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

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

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

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

4

1 回答 1

0

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

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

当用户是管理员时,他们将获得修改访问权限。当他们是只读用户时,他们不会被授予修改访问权限。当他们是用户时,他们也会被检查权限,如果他们拥有这些权限,他们就会被授予修改访问权限。否则,它们将被视为只读用户。

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

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

到目前为止,这似乎效果很好,到目前为止还没有任何问题。我宁愿将这个逻辑添加到一个地方,比如自定义授权属性类,但同时,我认为将它放在那里是不合适的,因为它只适用于一个模块。谢谢。

于 2017-01-13T14:53:18.083 回答