向用户添加特定角色以查看页面上的内容

adding a specific roles to user to see something on the page

虽然我之前有过这个问题但是没有得到任何有用的东西并且被卡住了。好的,我的应用程序是一个简单的 ebay 克隆,我将用户分为角色 ID 为 1 和 2 的买家和卖家角色。当任何人注册或登录时,他们将被转移到应用程序的索引页面,现在我希望买家看到一些东西与索引页上的卖家不同,为此我尝试了 if 和 else 方法,但没有任何反应。我做错了什么吗? 我还有其他方法可以解决这个问题。

我的Index.html.erb文件

    <div class="col-md-12 text-right">
        <% if role_id == 1 %>
            <%= link_to "Add a new Product", new_product_path, class: "btn btn-success" %>
    </div>
    <% else %>
      <div class="col-md-8">
        <% @products.each do |productt| %>
    <div class="product">
    <h4><strong><font style="text-transform: capitalize;"><%= shipment.user.full_name%></strong></h4></font>
    <h5><strong>DESCRIPTION: </strong><%= product.description %></h5>
     <div class="thumbnail">
    <td><%= image_tag product.image.url(:medium)%></td>
      <div class="meta">
        <%= link_to time_ago_in_words(product.created_at) + " ago" %>
        <span class="admin"> 
          | <%= link_to "Show Details", product %>
       </span>
     </div>
    </div>
   </div>
  </div>
 <% end %>
<% end %>

我的seeds.rb

['buyers', 'sellers'].each do |role|
    Role.where(name: role).first_or_create
end

你需要多研究一点系统结构。具体来说,你问的是如何将 buyer/seller 发送到不同的页面(这表明一个主要的系统鸿沟),而我认为你实际上是在问 authorization.

  • Authorization = giving a user permission to do something
  • Authentication = are they a user at all?

我认为你应该有一个基本级别的用户(没有"roles"),能够为每个用户分配特定的授权能力。

这基本上会使每个用户成为买家,除了那些有许可出售的用户。这样,您可以为您的用户分配 "level",如果他们的数据集中有该级别,则允许他们执行操作。

--

我会这样设置:

#app/models/user.rb
class User < ActiveRecord::Base
   # columns id | username | password | role_id | etc
   belongs_to :role
   def has_role? test_role
       role.id == test_role
   end
end

#app/models/role.rb
class Role < ActiveRecord::Base
   # columns id | name | description | etc
   has_many :users
end

这将使您能够调用以下内容:

<%= link_to "Add a new Product", new_product_path, class: "btn btn-success" if current_user.has_role? "1" %>

这将使您能够向 Role 模型添加一系列角色,为每个用户分配一个角色。这将定义用户可以访问的功能数量(即他们只能在级别“2”等时出售)。