[英]Having trouble with IF user_signed in using Devise authentication 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 %>
假设user
和rota
之间的关系是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'> </td>
<% end %>
</tr>
<% end %>
希望它将为您服务。 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.