我在设计用户上创建了一个布尔值来确定管理员。现在我有了这个,我有一个用户列表。我也想让其他用户管理员,所以我输入了编辑链接,但他们只是保持链接到我自己的个人资料。我是否必须使用像CanCan这样的宝石,或者我是否可以通过用户的布尔值来实现这一点?
admin_view.html.erb
<div>
<h1>Admin View</h1>
<table>
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Native Language</th>
<th>Learning Language</th>
<th>Admin?</th>
<th colspan="3"></th>
</tr>
</thead>
<tbody>
<% @users.each do |user| %>
<tr>
<td><%= user.first_name %></td>
<td><%= user.last_name %></td>
<td><%#= user.meeting_time %></td>
<td><%= user.admin %></td>
<td><%= %></td>
<td><%= %></td>
<td><%= link_to 'Edit', edit_user_path(user) %></td>
<% end %>
</tr>
</tbody>
</table>
编辑视图
<h2>Edit <%= resource_name.to_s.humanize %></h2>
<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %>
<%= devise_error_messages! %>
<div class="field">
<%= f.label :first_name %>
<%= f.text_field :first_name, autofocus: true %>
</div>
<div class="field">
<%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br />
<%= f.password_field :current_password, autocomplete: "off" %>
</div>
<div class="form-group">
<%= f.label :admin %>
<%= f.check_box :admin %>
</div>
<div class="actions">
<%= f.submit "Update" %>
</div>
<% end %>
对于rails来说还是非常新的,所以如果我需要发布任何其他信息,请告诉我。谢谢!
更新
profiler_controller.rb
def admin_view
@users = User.all
end
答案 0 :(得分:0)
这是class feed(object):
def __init__ (self, food = 0, water = 0) :
self.food = food
self.water = water
def fill(self):
self.food += 1
self.water += 1
的情况(用户是否有权限)。
正如您所说,您可以使用CanCanCan
(authorization
不再维护)来执行此操作,但有许多类似的宝石,例如Pundit
等。
如果使用CanCan
,我会使用以下内容:
CanCanCan
这将允许您使用:
#config/routes.rb
resources :users do
post :admin #-> url.com/users/:user_id/admin
end
#app/models/ability.rb
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :user
end
end
end
如果需要,我可以提供更多;这应该回答你的问题。