我目前有一个简单有效的授权设置,如下所示。
目前,管理员用户(以及其他任何人)都无法销毁帖子。但是,我还想让用户能够销毁自己的帖子。
我怎样才能做到这一点?
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 %>
假设:你的帖子有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