2014-12-07 101 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

相關問題