在我的rails v4应用中,用户属于一个组。
build_pip_package
每个小组都可以有很多项目,
tensorflow/tools/pip_package/BUILD
每个项目都可以在一对多的关系中进行多次实验。
在我的路线中,我有:
class User < ActiveRecord::Base
belongs_to :group
...
我想做的只是允许用户访问项目和实验,如果项目与用户具有相同的group_id(即,如果用户在项目中输入项目ID参数#show route for a project outside他们的小组,将不会显示)。是否有一种干净的方法来实现这一点而无需在视图中进行多项检查?
答案 0 :(得分:2)
看一下基于组成员身份构建自定义约束:
http://guides.rubyonrails.org/routing.html#advanced-constraints
非常简单的示例(显然,您需要匹配您的项目设计):
// String.raw(callSite, ...substitutions)
function quux (strings, ...values) {
strings[0] === "foo\n"
strings[1] === "bar"
strings.raw[0] === "foo\\n"
strings.raw[1] === "bar"
values[0] === 42
}
quux `foo\n${ 42 }bar`
String.raw `foo\n${ 42 }bar` === "foo\\n42bar"
然后在你的路线中:
class GroupConstraint
def initialize
@project = Project.find(params[:id])
@user = current_user
end
def matches?(request)
@user.groups.include?(@project.group)
end
end
答案 1 :(得分:1)
这是授权问题,因此,对我而言,最好定义用户可以使用任何auhtorization库查看的内容,而不是使用路由或类似内容。例如,您肯定想知道如果您在视图中显示给定组的链接,哪些组可供当前用户使用等等。
以cancancan
为例:https://github.com/CanCanCommunity/cancancan。