Ruby on Rails:Devise + Cancan - 如何编辑其他用户?

时间:2014-02-14 23:00:37

标签: ruby-on-rails devise cancan

我刚刚为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

我一整天都在改变这段代码,我甚至可能会围成一圈。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我明白了。即使我能够用显示的逻辑限制html / css,我也无法限制模型/控制器交互。我有多个控制器,我正在处理的控制器没有验证检查。换句话说,我添加了

 before_filter :authenticate_user!

到我的users_controller.rb文件,现在知道我是管理员,这意味着什么。我只是随心所欲地添加了这个,但到目前为止我所知道的关于Devise / Cancan的所有内容都来自wiki:

https://github.com/ryanb/cancan/#wiki-readme