我正在为一个网站创建一个管理面板,我的 15 个用户/公司可以在其中登录、更改他们的信息、添加产品等。他们不是管理员。
我有一个具有以下属性的用户表(稍微简化):
email:string, password:string, company_id:integer, is_admin:boolean
此外,我还有许多其他表格,例如 Products、Reviews 等,:belongs_to company
它们的模型中包含属性 company_id 和 ' '。
除了 15 个公司用户之外,我还有自己的管理员用户帐户,这是唯一一个设置为is_admin = true
. 没有为此用户帐户设置 company_id。
在管理面板中,我有产品和评论选项卡,其中显示了许多产品和评论。
我的问题/问题
我想做的事情很简单,我期待一个优雅的解决方案,因为这似乎是一个很正常的问题。
- 我希望管理员在产品和评论选项卡中查看所有产品和所有评论。
- 我希望普通公司用户 (is_admin = false) 只能查看和更改他们自己的产品和评论,即根据 company_id 属性过滤。
到目前为止,我的解决方案是有这样的东西(@current_user 是登录用户):
# index
if is_admin
@products = Product.all
else
@products = Product.where(:company_id => @current_user.company_id)
end
...以及#show 等类似的东西。这行得通,但感觉必须有一种更优雅的方式来处理这个问题?事实上,我有大约 10-12 个模型,例如产品和评论,而且可能还有更多。
处理此类问题的最佳方法是什么?