允许用户仅在创建帖子时销毁帖子

问题描述 投票:0回答:1

我目前有一个简单有效的授权设置,如下所示。

目前,管理员用户(以及其他任何人)都无法销毁帖子。但是,我还想让用户能够销毁自己的帖子。

我怎样才能做到这一点?

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 %>
ruby-on-rails ruby-on-rails-5
1个回答
1
投票

假设:你的帖子有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
© www.soinside.com 2019 - 2024. All rights reserved.