Ruby on rails Rails:仅查看用户';在管理员中保存自己的信息

Ruby on rails Rails:仅查看用户';在管理员中保存自己的信息,ruby-on-rails,admin,Ruby On Rails,Admin,我正在为一个网站创建一个管理面板,在这里我的15个用户/公司可以登录、更改信息、添加产品等。他们不是管理员 我有一个用户表,其属性如下(稍微简化): 此外,我还有许多其他表格,如产品、评论等,其中包含属性company_id和其模型中的“:belling_to company” 除了15个公司用户之外,我还有自己的管理员用户帐户,这是唯一一个设置为is_admin=true的帐户。没有为此用户帐户设置公司id 在管理面板中,我有产品和评论选项卡,其中显示了许多产品和评论 我的问题 我想做的是非常

我正在为一个网站创建一个管理面板,在这里我的15个用户/公司可以登录、更改信息、添加产品等。他们不是管理员

我有一个用户表,其属性如下(稍微简化):

此外,我还有许多其他表格,如产品、评论等,其中包含属性company_id和其模型中的“
:belling_to company

除了15个公司用户之外,我还有自己的管理员用户帐户,这是唯一一个设置为
is_admin=true
的帐户。没有为此用户帐户设置公司id

在管理面板中,我有产品和评论选项卡,其中显示了许多产品和评论

我的问题

我想做的是非常简单的,我期待一个优雅的解决方案,因为这似乎是一个很正常的问题

  • 我想管理员看到所有的产品和所有的产品和评论标签
  • 我希望普通公司用户(is_admin=false)只查看和更改自己的产品和评论,即根据公司id属性进行过滤
到目前为止,我的解决方案是这样的(@current_user是登录用户):

…还有类似的节目等等。这是可行的,但感觉必须有一种更优雅的处理方式?事实上,我有一些10-12个模型,比如产品和评论,可能还有更多


处理此类问题的最佳方法是什么?

如果您的原始解决方案有效,我的原始答案可能不会很有帮助。也许您可以在user show controller中定义模型对象

def show
   if @current_user.is_admin
    @products = Product.all
    @reviews = Review.all
  else
    @products = @current_user.products
    @reviews = @current_user.products
  end
然后在每个选项卡中包含一个,等等

(我最初的答案大部分都比较复杂,与你当时的做法类似:)

在每个index.html.erb文件中:

<h2>Product List</h2>
<table>
<tr>
  <td>Title</td>
  <td>Description</td>
</tr>

<% @products.each do |product| %>
<tr>
  <td><%= product.title %></td>
  <td><%= product.description %></td>
</tr>
<% end %>
</table>
产品列表
标题
描述

您可能需要一个简单的角色授权方案。
admin_controller.rb将是一个很好的地方。使用before_筛选器,查看用户是否为管理员。如果是这样,该用户将有额外的访问权限。

谢谢,这正是我所做的,它确实有效,但我需要为每个索引/显示等处理它。我有一些类似于产品/评论的10-12控制器……也许这是唯一的解决方案。我希望能有一些聪明的过滤器或者一些能产生魔力的东西。我的直觉是,应该有比这更优雅的东西……也许你可以把所有的东西都放在管理面板(用户/管理员显示页面)上,放弃索引页面,把它们放在一个地方?也许其他人知道一个更优雅的解决方案,也许其他人知道一个更优雅的解决方案,在这个解决方案中,您可以迭代用户拥有的所有类,而无需显式定义每个类,但这将在视图中(例如user.children.each do | child |,child.each do | child | u instance |,child | u instance.title)。嗯,我想可能至少没有一种标准的、众所周知的处理方法是“每个人”都知道的(除了我)。我想我可能必须使用此版本的解决方案。我相信Prefore_筛选器将是解决此问题的地方,但如何实际解决它是另一个问题。is_admin只是问题的一部分,另一个是使用公司id筛选每个控制器。
def show
   if @current_user.is_admin
    @products = Product.all
    @reviews = Review.all
  else
    @products = @current_user.products
    @reviews = @current_user.products
  end
def index
  if @current_user.is_admin
    @products = Product.all
  else
    @products = @current_user.products
  end
end
<h2>Product List</h2>
<table>
<tr>
  <td>Title</td>
  <td>Description</td>
</tr>

<% @products.each do |product| %>
<tr>
  <td><%= product.title %></td>
  <td><%= product.description %></td>
</tr>
<% end %>
</table>