首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >专家: user_signed_in助手

专家: user_signed_in助手
EN

Stack Overflow用户
提问于 2016-03-10 11:57:45
回答 2查看 604关注 0票数 0

我用专家来处理授权。我希望每个人都能看到我的用户配置文件,所以在我的user_policy.rb中,我有:

代码语言:javascript
运行
复制
 def show?
    true  # Anyone can view a show
  end

在“我的用户”/show.html.erb中,只有在以下情况下才会显示“编辑配置文件”按钮:

代码语言:javascript
运行
复制
<% if policy(@user).update? %>
  <!--  show edit button  -->
<% end %>

问题是,当我试图访问一个配置文件而我没有登录时,专家正在寻找一个“用户”:

代码语言:javascript
运行
复制
def update?
  record == user || user.admin == true # Only user creator can update it
end

我有一个错误,说用户是零,所以管理是未定义的。我想这么做:

代码语言:javascript
运行
复制
def update?
  if user_signed_in?
    record == user || user.admin == true # Only user creator can update it
  else
    false
  end
end

但是user_signed_in呢?是设计助手,在专家中是不可访问的。有什么类似的方法吗?还是有更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-10 12:15:44

你就不能先检查一下用户变量的存在吗?

代码语言:javascript
运行
复制
def update?
  user && (record == user || user.admin == true) # Only user creator can update it
end
票数 2
EN

Stack Overflow用户

发布于 2016-03-10 13:55:31

正如Richard所说,您应该首先验证是否有一个用户,以及他是所有者还是管理员。我喜欢这样读:

代码语言:javascript
运行
复制
  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.
 end
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35915865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档