簡體   English   中英

設計gem用戶身份驗證Ruby on Rails

[英]Devise gem User Authentication Ruby on Rails

這是我的index.html.erb支架的代碼,因為您可以看到if阻止用戶“顯示,編輯或銷毀”條目。 但是,他們可以通過單擊“新建Rotum”來創建新的Rota條目。 我可以在“顯示,編輯,銷毀”中擺脫管理部分,每個人都可以做所有事情。 但是我希望用戶僅能顯示編輯才能銷毀其OWN條目,而不是其他所有人,因為當我對用戶進行身份驗證時會發生什么?

 <h1>Listing rota</h1>

 <table id = "tabletest">
  <thead>
    <tr>
  <th>Name</th>
  <th>Mobile</th>
  <th>Email</th>
  <th>Category</th>
  <th>Other</th>
  <th colspan="3"></th>
   </tr>
 </thead>

 <tbody>
   <% @rota.each do |rotum| %>
    <tr>
    <td><%= rotum.name %></td>
    <td><%= rotum.mobile %></td>
    <td><%= rotum.email %></td>
    <td><%= rotum.category %></td>
    <td><%= rotum.other %></td>

 <% if current_user.try(:admin?) %>
    <td><%= link_to 'Show', rotum %></td>
    <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td>
    <td><%= link_to 'Destroy', rotum, method: :delete, data: {
   confirm: 'Are you sure?' } %></td>
  </tr>
   <% end %>
         <% end %>
 </tbody>
</table>

<br>
   <% if user_session %>
<%= link_to 'New Rotum', new_rotum_path %>
  <% end %>

假設userrota之間的關系是has_many ,則索引控制器應為:

class RotasController < ApplicationController
  def index
    @rota = current_user.rotas
  end
end

current_user是由設計規定的輔助方法,如圖這里

情況1:如果要在表中顯示用戶創建的角色集。

class RotasController < ApplicationController
  def index
    @rota = Rota.where(current_user.try(:admin?) ? true : {user_id: current_user.id})
  end
end

在這里它將獲取admin的所有記錄,如果用戶不是admin,則將獲取相關記錄。

並在視圖文件中

<tbody>
   <% @rota.each do |rotum| %>
    <tr>
    <td><%= rotum.name %></td>
    <td><%= rotum.mobile %></td>
    <td><%= rotum.email %></td>
    <td><%= rotum.category %></td>
    <td><%= rotum.other %></td>

    <td><%= link_to 'Show', rotum %></td>
    <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td>
    <td><%= link_to 'Destroy', rotum, method: :delete, data: {
   confirm: 'Are you sure?' } %></td>
  </tr>
 <% end %>

情況2:在另一種情況下,如果您想向每個用戶顯示所有記錄,但是只有用戶創建了該記錄,該用戶才能訪問“顯示,編輯,刪除”。然后,您需要執行其他操作。

class RotasController < ApplicationController
  def index
    @rota = Rota.all
    @is_admin = current_user.try(:admin?)
  end
end

並認為

<tbody>
   <% @rota.each do |rotum| %>
    <tr>
    <td><%= rotum.name %></td>
    <td><%= rotum.mobile %></td>
    <td><%= rotum.email %></td>
    <td><%= rotum.category %></td>
    <td><%= rotum.other %></td>
    <% if @is_admin || (rotum.user_id == current_user.id)
      <td><%= link_to 'Show', rotum %></td>
      <td><%= link_to 'Edit', edit_rotum_path(rotum) %></td>
      <td><%= link_to 'Destroy', rotum, method: :delete, data: {
   confirm: 'Are you sure?' } %></td>
    <% else %>
      <td colspan='3'> &nbsp; </td>
    <% end %>
  </tr>
 <% end %>

希望它將為您服務。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM