我有一个架构问题。我应该在哪里检查某些操作的用户权限?
例如:
1)在控制器中,我从视图中获取参数并在中间模型中启动一个过程。
2)中间模型决定以任何方式转换和转换哪个参数,并通过模型修改或创建数据
3)模型直接与DataBase进行通信
你认为在那个"架构中的正确位置"检查权限,例如将数据保存到数据库?
答案 0 :(得分:1)
我实际上会在调用控制器之前进行授权检查,有点像描述here(我真的需要更新那个旧帖子)。最好是作为控制器实例周围的装饰器,它可以根据 controller + method 对,对用户允许操作的操作进行细粒度控制。
您可能会想到的另一点是"授权查找"用于模板的辅助函数,因为您可能需要向用户显示或隐藏一些UI元素,这些用户不应该执行相关操作。 控制器+方法检查,在执行之前仍然可以作为实际的安全措施,但它往往是一种生活质量的改进。
你不应该将授权检查放在每个控制器或(甚至更糟糕的)模型层中,因为这往往会促使过多的复制粘贴,这反过来会导致错误并成为当你想要改变授权系统的机制时,这是一个巨大的问题。