我有一个 Ruby on Rails 网络应用程序,用户可以在其中创建笔记。笔记属于创建它的用户。
我安装了Pundit gem来创建授权,特别是管理员角色。
我希望用户能够:
- 创建、更新或删除他们的笔记
并且管理员能够对任何用户的笔记做同样的事情。
当我以管理员身份登录时,我可以创建一个新笔记。当我以会员身份登录时,我无法创建新笔记。我立即被重定向到根页面,甚至从未被带到新的笔记页面。
这是我收到的 Flash 错误消息:
not allowed to new? this #<Note:0x007fe2ca17bc18>
在安装 Pundit 之前,成员可以创建新注释。所以我认为这与我的政策有关。
以下是我application_policy.rb
文件中的相关方法:
def index?
false
end
def show?
scope.where(:id => record.id).exists?
end
def create?
user.present?
end
def new?
create?
end
def update?
user.present? && (record.user == user || user.admin?)
end
def edit?
update?
end
def destroy?
update?
end
这是我的note_policy.rb
文件:
class NotePolicy < ApplicationPolicy
def create?
user.present? && (record.user == user || user.admin?)
end
def new?
create?
end
def update?
create?
end
def destroy?
update?
end
end
以下是我notes_controller.rb
文件中的相关操作:
def new
@note = Note.new
authorize @note
end
def create
@note = Note.new(notes_params)
@note.user = current_user
authorize @note
if @note.save
redirect_to notes_path
else
render :new
end
end
我试图弄清楚为什么管理员可以创建新笔记,但成员不能。
谢谢你。