2014-12-07 76 views
1

我有一个用户模型,我想允许登录用户完全删除他们的账户。我能够允许管理员用户删除其他用户,但对于用户删除他们自己的帐户,它不起作用!我究竟做错了什么?允许当前用户删除他们的账户

users_controller.rb

class UsersController < ApplicationController 
before_filter :signed_in_user, 
      only: [:index, :edit, :update, :destroy, :following, :followers] 
before_filter :correct_user, only: [:edit, :update, :destroy] 
before_filter :admin_user,  only: :destroy 

def index 
    @users = User.paginate(page: params[:page]) 
end 

def show 
    @user = User.find(params[:id]) 
    @microposts = @user.microposts.paginate(page: params[:page]) 
end 

def new 
    @user = User.new 
end 

def create 
    @user = User.new(params[:user]) 
    if @user.save 
    sign_in @user 
    flash[:success] = "Welcome to the Course Management System!" 
    redirect_to @user 
    else 
    render 'new' 
    end 
end 

def edit 
end 

def update 
    if @user.update_attributes(params[:user]) 
    flash[:success] = "Profile updated" 
    sign_in @user 
    redirect_to @user 
    else 
    render 'edit' 
    end 
end 

def destroy 
    User.find(params[:id]).destroy 
    flash[:success] = "User destroyed." 
    redirect_to users_url 
end 

def following 
    @title = "Following" 
    @user = User.find(params[:id]) 
    @users = @user.followed_users.paginate(page: params[:page]) 
    render 'show_follow' 
end 

def followers 
    @title = "Followers" 
    @user = User.find(params[:id]) 
    @users = @user.followers.paginate(page: params[:page]) 
    render 'show_follow' 
end 

private 

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to(root_url) unless current_user?(@user) 
end 

def admin_user 
    redirect_to(root_url) unless current_user.admin? 
end 
end 

_user.html.erb

<li> 
    <%= gravatar_for user, size: 52 %> 
    <%= link_to user.name, user %> 

    <% if current_user?(user) %> 
| <%= link_to "delete", user, method: :delete %> 
    <% end %> 

    <% if current_user.admin? && !current_user?(user) %> 
| <%= link_to "delete", user, method: :delete, 
           data: { confirm: "You sure?" } %> 
    <% end %> 

</li> 

现在,当我点击 “删除”,它只是重定向我的主页,而不删除用户。当我是管理员时,我可以删除没有问题的其他用户。

+0

很难说你的before_filter中的逻辑发生了什么。在你的项目目录中搜索一个'def admin_user',并用你的问题发布该代码。该方法可能在您的一个控制器中,可能位于'application_controller.rb'中。发布'correct_user'方法定义也是有用的。 – sealocal 2014-12-07 19:03:51

回答

1

您有before_filter可以阻止非管理员用户到达销毁操作。

删除线:在您的控制器

before_filter :admin_user,  only: :destroy 
+0

删除该行使其正常工作,但阻止管理员用户删除其他用户。 before_filter逻辑应该如何:1)管理员用户可以删除其他用户2)正确的用户可以删除自己 – 2014-12-07 11:24:23

+0

将correct_user中的最后一行改为: 'redirect_to(root_url)除非current_user?(@ user)|| current_user.admin?' – Esse 2014-12-07 12:39:37

1

看看你的过滤器。

的before_filter:admin_user,只有:摧毁 我认为你正在检查一个USR应该是管理员删除的记录。正常使用不是管理员,所以他无法删除他的帐户。
检查您的日志,这个过滤器将会被执行。

+0

当我删除before_filter:admin_user时,只有:: destroy,它可以工作,但管理员不能再删除其他用户。我怎样才能确保两个工作:1.管理员可以删除其他用户,用户可以删除自己。 – 2014-12-07 10:37:09

+2

我没有说过去除过滤器,你需要修改你的过滤动作的逻辑。 – 2014-12-07 10:59:51

+1

另外你的另一个过滤器correct_user重定向管理员(检查correct_user的逻辑),这就是为什么管理员无法删除任何用户。 – 2014-12-07 11:11:29

相关问题