我刚刚为Cancan设置了Devise用户角色。我认为我走在正确的轨道上,但我遇到了一种情况,我认为我错过了一些小事。
我希望任何具有角色的用户:admin能够编辑其他所有用户的个人资料/角色。我已经设置了正确的路由,但是当我点击其他用户的链接时,我被重定向。
_user.html.erb
<% @users.each do |user| %>
<li>
<%= gravatar_for user, size: 52 %>
<%= link_to user.name, user %>
<% if can? :assign_roles, @user %>
| <%= link_to "delete", user, method: :delete, confirm: "Delete user?" %>
| <%= link_to "edit", edit_user_path(user) %>
<% end %>
</li>
<% end %>
users_controller.rb ... def编辑 @user = User.find(params [:id]) 端
def update
authorize! :assign_roles, @user if params[:user][:assign_roles]
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated"
sign_in @user
redirect_to @user
else
render 'edit'
end
end
ability.rb
def initialize(user)
can :assign_roles, User if user.admin?
can :manage, :all if user.is? :admin
end
我一整天都在改变这段代码,我甚至可能会围成一圈。
非常感谢任何帮助。
答案 0 :(得分:1)
我明白了。即使我能够用显示的逻辑限制html / css,我也无法限制模型/控制器交互。我有多个控制器,我正在处理的控制器没有验证检查。换句话说,我添加了
before_filter :authenticate_user!
到我的users_controller.rb文件,现在知道我是管理员,这意味着什么。我只是随心所欲地添加了这个,但到目前为止我所知道的关于Devise / Cancan的所有内容都来自wiki: