Rails:只在admin中查看用户自己的信息

时间:2013-05-25 01:55:05

标签: ruby-on-rails admin

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

我有一个User-table,其属性如(略微简化):

email:string, password:string, company_id:integer, is_admin:boolean

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

除了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个模型,如产品和评论,可能还有更多。

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

2 个答案:

答案 0 :(得分:0)

如果您的原始解决方案有效,我原来的答案可能不是很有帮助。也许您可以在用户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

然后包含一个<%@ products.each do | product | %GT;在每个标签等

(我原来的答案大部分都是比你做的更复杂和类似的事情:)

def index
  if @current_user.is_admin
    @products = Product.all
  else
    @products = @current_user.products
  end
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>

答案 1 :(得分:0)

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