我有一个组资源,我正在尝试使用适当的授权来设置该资源。
我试图实现的授权逻辑是这样的:
- 只有群组成员才能查看他们的群组。
- 管理员可以查看any组,以及采取其他行动。
我尝试在组控制器中使用以下 before_filter 语句来执行此操作:
before_filter :signed_in_user
before_filter :correct_user, only: :show
before_filter :admin_user, only: [:show, :index, :edit, :update, :destroy]
Correct_user 有效,因为我已经验证只有组成员可以查看他们的组。但是,我想要发生的是 admin :show 子句覆盖它,以便管理员可以查看任何组。目前这不起作用。我猜我的过滤器顺序和选项有问题。
有人可以告诉我哪里出了问题吗?
EDIT
根据 Amar 的请求添加我的方法代码:
private
def correct_user
# User has to be a member to view
@group = Group.find(params[:id])
redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil?
end
def admin_user
redirect_to(root_path) unless current_user.admin?
end
更新 Correct_user 方法或使用以下定义创建另一个方法,从其他过滤器中删除 show 并使用新方法添加 before_filter 。
def correct_user
@group = Group.find(params[:id])
redirect_to(root_path) if @group.members.find_by_member_id(current_user).nil? && !current_user.admin?
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)