Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中混合安全逻辑和模型?_Ruby On Rails_Security_Model - Fatal编程技术网

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
  • 更改记录在单独的表中
模型不是应用程序中唯一的安全检查。用户界面在显示编辑视图之前检查权限。该模型充当了视图/控制器级别上任何bug的屏障


注:模型和控制器级别之间的唯一冲突是
当前用户
方法。我正在开发的应用程序永远不会允许匿名用户。

我不认为在模型中加入安全逻辑是一种糟糕的设计。您将业务逻辑放在那里,可以将安全逻辑视为一种业务逻辑。您当然不希望所有内容都出现在控制器或视图中,而是希望遵循这种方法


您的模型应该作为应用程序逻辑的一个内聚块独立存在。您应该能够从Rails控制台完全驱动您的模型。此外,在模型中具有安全逻辑使单元测试更容易。

我认为这取决于您的模型是否打算直接访问。如果是的话,那么肯定应该意识到安全问题,可能是通过mixin,因为这些问题可能在某种程度上与模型的主要问题正交


如果模型应该是不可见的,并且您的控制器中已经有了您的安全逻辑,那么我就不去管模型了。

MVC框架中的模型应该完全包含您的所有业务逻辑。在设计良好的MVC应用程序中,至少在理论上,您应该能够在不同的上下文中重用您的模型,而不必重新实现任何业务逻辑

在任何情况下,我都认为授权、输入验证和审计日志记录是非常明确的业务逻辑,因此应该在您的模型中处理

另一方面,我认为身份验证、加密、加密哈希等都不是模型的一部分。这些安全方面不是核心业务逻辑的一部分,它们通常是应用程序接口的一部分