我用专家来处理授权。我希望每个人都能看到我的用户配置文件,所以在我的user_policy.rb中,我有:
def show?
true # Anyone can view a show
end在“我的用户”/show.html.erb中,只有在以下情况下才会显示“编辑配置文件”按钮:
<% if policy(@user).update? %>
<!-- show edit button -->
<% end %>问题是,当我试图访问一个配置文件而我没有登录时,专家正在寻找一个“用户”:
def update?
record == user || user.admin == true # Only user creator can update it
end我有一个错误,说用户是零,所以管理是未定义的。我想这么做:
def update?
if user_signed_in?
record == user || user.admin == true # Only user creator can update it
else
false
end
end但是user_signed_in呢?是设计助手,在专家中是不可访问的。有什么类似的方法吗?还是有更好的方法?
发布于 2016-03-10 12:15:44
你就不能先检查一下用户变量的存在吗?
def update?
user && (record == user || user.admin == true) # Only user creator can update it
end发布于 2016-03-10 13:55:31
正如Richard所说,您应该首先验证是否有一个用户,以及他是所有者还是管理员。我喜欢这样读:
def update?
user.present? && (is_owner? || is_admin?)
end
private
def is_owner?
record.user == user
end
def is_admin?
user.admin #In your case user.admin is simple enough so you don't need that, but sometimes it's not.
endhttps://stackoverflow.com/questions/35915865
复制相似问题