使用多个自定义授权属性

时间:2017-01-11 13:28:16

标签: c# asp.net-mvc-4 custom-authentication

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

  1. 您是否同意接受条款?是的,继续2.不,您是未经授权的,并被扔到未经授权的页面。
  2. 您是该网站的成员吗?是的,请继续执行3.不,您未经授权而被投放到未经授权的页面。
  3. 您的角色是否允许进入此模块?是的,继续。不,您是未经授权而被扔到未经授权的页面。
  4. 这5个模块的类目前由这个自定义授权属性进行修饰,并检查它们各自的角色(3/5模块有一个单独的角色,而另外2个有多个,一个有4个,一个我发布的帖子现在有3个)。然而,随着我们在1个模块中加强安全性,它已经成为一个如何解决它的问题。我们正在更改的这个模块有3个角色(只读,用户,管理员)。

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

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

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

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

    然而,那里有一个问题。为管理员和只读用户执行此操作可以正常工作,但用户案例就是问题所在。用户必须进行二次检查,以查看他们是否对他们将要查看的特定记录具有权限。如果他们不这样做,那么他们就像只读用户那样被允许,但无法编辑。

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

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

1 个答案:

答案 0 :(得分:0)

因此经过深思熟虑之后,我提出了以下解决方案。我没有添加到我当前的自定义授权属性,因为它只对站点中的一个模块是独占的。

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

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

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

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

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