Ruby on rails 在RubyonRails中混合安全逻辑和模型?
在模型中混合处理安全逻辑的代码是一种糟糕的设计吗 在“保存前”回调中编辑页面的示例Ruby on rails 在RubyonRails中混合安全逻辑和模型?,ruby-on-rails,security,model,Ruby On Rails,Security,Model,在模型中混合处理安全逻辑的代码是一种糟糕的设计吗 在“保存前”回调中编辑页面的示例 当前用户从控制器层中的current\u user方法获取 如果当前用户具有权限,则引发异常:编辑页面为假 editor\u id设置为current\u user.id 更改记录在单独的表中 模型不是应用程序中唯一的安全检查。用户界面在显示编辑视图之前检查权限。该模型充当了视图/控制器级别上任何bug的屏障 注:模型和控制器级别之间的唯一冲突是当前用户方法。我正在开发的应用程序永远不会允许匿名用户。我不认为
- 当前用户从控制器层中的
方法获取current\u user
- 如果当前用户具有权限,则引发异常:编辑页面为假
设置为editor\u id
current\u user.id
- 更改记录在单独的表中
注:模型和控制器级别之间的唯一冲突是
当前用户
方法。我正在开发的应用程序永远不会允许匿名用户。我不认为在模型中加入安全逻辑是一种糟糕的设计。您将业务逻辑放在那里,可以将安全逻辑视为一种业务逻辑。您当然不希望所有内容都出现在控制器或视图中,而是希望遵循这种方法
您的模型应该作为应用程序逻辑的一个内聚块独立存在。您应该能够从Rails控制台完全驱动您的模型。此外,在模型中具有安全逻辑使单元测试更容易。我认为这取决于您的模型是否打算直接访问。如果是的话,那么肯定应该意识到安全问题,可能是通过mixin,因为这些问题可能在某种程度上与模型的主要问题正交
如果模型应该是不可见的,并且您的控制器中已经有了您的安全逻辑,那么我就不去管模型了。MVC框架中的模型应该完全包含您的所有业务逻辑。在设计良好的MVC应用程序中,至少在理论上,您应该能够在不同的上下文中重用您的模型,而不必重新实现任何业务逻辑 在任何情况下,我都认为授权、输入验证和审计日志记录是非常明确的业务逻辑,因此应该在您的模型中处理 另一方面,我认为身份验证、加密、加密哈希等都不是模型的一部分。这些安全方面不是核心业务逻辑的一部分,它们通常是应用程序接口的一部分