Разрешить пользователю уничтожать пост, только если он его создал - PullRequest
0 голосов
/ 25 февраля 2019

В настоящее время у меня есть простая и эффективная настройка авторизации, как показано ниже.

В настоящее время пользователи-администраторы (и никто другой) могут удалять сообщения.Тем не менее, я также хотел бы позволить пользователям иметь возможность уничтожать их собственную запись.

Как мне этого добиться?

user.rb

def editor? 
  self.role == 'editor' 
end

def admin? 
  self.role == 'admin'
end

контроллер приложения

   helper_method :current_user

   def current_user
     @current_user ||= User.find(session[:user_id]) if session[:user_id]
   end 

   def require_user
     redirect_to '/login' unless current_user
   end 

   def require_editor 
     redirect_to '/' unless current_user.editor? 
   end

   def require_admin
     redirect_to '/' unless current_user.admin? 
   end

выводит контроллер

  before_action :require_user, only: [:show, :edit, :update, :destroy]
  before_action :require_editor, only: [:edit]
  before_action :require_admin, only: [:destroy]

в виде

<% if current_user && current_user.admin? %>
# Destroy button
<% end %>

1 Ответ

0 голосов
/ 25 февраля 2019

Предположение: Ваше сообщение имеет user_id.

<% if current_user&.admin? || post.user_id == current_user.id %>

current_user&.admin? - сокращение от current_user && current_user.admin?, а затем вы проверяете, создано ли сообщение текущим пользователем.

Также переписать перед действием:

before_action :require_admin_or_owner, only: [:destroy]

def require_admin_or_owner
  redirect_to '/' unless current_user.admin? || 
    Post.find(params[:id]).user_id == current_user.id
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...