我可以根据当前用户为模型设置默认范围吗?

Posted

技术标签:

【中文标题】我可以根据当前用户为模型设置默认范围吗?【英文标题】:Can I set a default scope to a model based on the current user? 【发布时间】:2016-05-08 23:56:00 【问题描述】:

目前我有一个User 模型,它使用acts as taggable on 给用户“角色”。所以我会有一个MemberAdminModerator 的标签。每个用户都有Reports 的关系。但是,会员应该只能看到他们的报告,版主应该能够看到他们的报告和任何会员的报告,最后管理员应该能够看到所有内容。

目前,我会在每个通过 if 语句访问报告的控制器页面上处理此问题,但这似乎是一种糟糕的做法,最终会导致有人看到他们不应该看到的报告。所以这让我想到是否有可能对模型的文件设置某种限制以在一个地方解决这个问题。

【问题讨论】:

您必须注意,您无法访问 current_user 以在模型层中可用。您必须将 current_user 作为范围的参数传递 【参考方案1】:

您可以在 applicationController 中使用 request_store gem 和 before_filter 来使 current_user 在模型中可访问。 但请记住,请求并不总是存在,因此请考虑可能的 nils

【讨论】:

以上是关于我可以根据当前用户为模型设置默认范围吗?的主要内容,如果未能解决你的问题,请参考以下文章

Android获取当前区域设置,而不是默认设置

在Oracle中将默认值设置为当前用户

Rails 单选按钮:根据模型/数据库条目设置默认值

如何将当前登录的用户指定为模型字段的默认值?

我可以将默认输入颜色选择器类型设置为检查网格/透明吗?

为当前单元格设置默认值 Google 电子表格