0

我正在为一个网站创建一个管理面板,我的 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 个模型,例如产品和评论,而且可能还有更多。

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

4

2 回答 2

0

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

于 2013-05-25T03:13:21.307 回答
0

如果您的原始解决方案有效,那么我的原始答案可能不是很有帮助。也许你可以在你的用户显示控制器中定义你的模型对象?

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 做 |product| %> 在每个选项卡中,等等。

(我的大部分原始答案,这更复杂,与您所做的类似:)

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>
于 2013-05-25T02:30:45.807 回答