因此,我在我的用户和用户修改的对象之间实现了一些权限。我想减少 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/