ruby-on-rails - 从模型访问 current_user 最优雅的方法是什么?或者为什么这是个坏主意?

标签 ruby-on-rails ruby activerecord

因此,我在我的用户和用户修改的对象之间实现了一些权限。我想减少 View / Controller 与模型之间的耦合(调用所述权限)。为此,我有一个想法:在 before_save/before_create/before_destroy 回调中实现一些权限功能。但由于权限与用户相关(current_user.can_do_whatever?),我不知道该怎么做。

这个想法甚至可能会增加耦合,因为 current_user 是专门的 Controller 级别。

我最初想这样做的原因是: 在我的所有 Controller 中,我都必须检查用户是否能够save/create/destroy。那么,为什么不像 rails 的 .save 那样,在 save/create/destroy 时返回 false,并且向模型对象添加错误并返回 false,就像 rails 的验证一样?

Idk,这是好事还是坏事?有更好的方法吗?

最佳答案

让 Controller 检查用户的权限。让模型处理授权逻辑会导致更多耦合(只是在不同的地方,并且仍然会耦合到 Controller 以获取当前用户)。检查权限并不是模型的真正内部逻辑。

比喻:想象一下,如果检查您是否可以读/写文件是文件的责任,而不是让操作系统(实际上是所有 Controller 之母)处理访问。

如果您想要更简洁的 Controller ,您可以(例如)制作一些通用的 before_filters 来限制对基于当前用户的 CRUD 操作的访问。

关于ruby-on-rails - 从模型访问 current_user 最优雅的方法是什么?或者为什么这是个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11005574/

相关文章:

ruby-on-rails - 如何在 ruby​​ on rails 中创建用户定义的重定向?

ruby - 如何将数组的所有其他元素相乘?

ruby-on-rails - Rails 3 - 自定义验证

ruby - 通过第三张表插入数据

ruby-on-rails - 如何在使用 activerecords 和多线程时管理打开和关闭数据库连接

ruby-on-rails - 在 .html.erb View 中将 <%= %> 呈现为字符串?

ruby-on-rails - 在一页上创建目标和任务的 Rails 待办事项列表应用程序 - 缺少参数

javascript - Rails 网络应用程序 : Rack app error handling request { GET/packs/js/application-682c14949987e19a8380. js }

ruby-on-rails - Rails 中的可选位置

ruby - 试图让 svn2git 在 Windows 上工作