我是rails的新手,在这里我有一个可怕的疑问,我正在开发,我发现我创建的规则将不再起作用。我用的是可逆罐。
假设我要在模块中进行开发,以便于交付和开发。目前只有一个模块可用,已经为这个模块定义的规则工作得很好,但当我交付另一个模块时,它们将不是同一用户的相同规则。
enum kind: {
User: 1,
Editor:2,
Admin: 3
}
enum charge: {
Auxiliary: 1,
Analyst: 2,
Coordinator: 3
}
enum print: {
No: 0,
Yes 1
}这些是目前可用的选项,这是针对与文档模型相关的用户模型的。但是,当我创建一个模型测试,即规则与文档完全不同时,我是否必须复制用户规则才能定义?
enum kind_test: {
User: 1,
Editor:2,
Admin: 3
}
enum charge_test: {
Auxiliary: 1,
Analyst: 2,
Coordinator: 3
}
enum print_test: {
No: 0,
Yes 1
}当我创建另一个模块时,我是否必须再次复制?我在用户中的规则永远是这些种类、收费和打印,变化的是不同型号的能力。
我的能力
if user.kind == 'Admin'
can: manage,: all
end
if user.kind == 'User'
if user.print == 'Yes'
can: view, Pop
if user.charge == 'Auxiliary'
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 1
end
if user.charge == 'Analyst'
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 1
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 2
end
if user.charge == 'Coordinator'
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 1
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 2
can [: index_pdf,: show,: read,: view,: index], Pop, status: 0, charge: 3
end
else
can: view, Pop
if user.charge == 'Auxiliary'
can [: show,: read,: view,: index], Pop, status: 0, charge: 1
end
if user.charge == 'Analyst'
can [: show,: read,: view,: index], Pop, status: 0, charge: 1
can [: show,: read,: view,: index], Pop, status: 0, charge: 2
end
if user.charge == 'Coordinator'
can [: show,: read,: view,: index], Pop, status: 0, charge: 1
can [: show,: read,: view,: index], Pop, status: 0, charge: 2
can [: show,: read,: view,: index], Pop, status: 0, charge: 3
end
end
end
if user.kind == 'Editor'
can: view, Pop
if user.charge == 'Auxiliary'
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 1
end
if user.charge == 'Analyst'
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 1
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 2
end
if user.charge == 'Coordinator'
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 1
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 2
can [: index_pdf,: show,: read,: view,: index,: edit], Pop, status: 0, charge: 3
end
end发布于 2018-01-31 06:00:07
这样如何:
if user.kind == 'Admin'
can: manage,: all
return
end
pop_permissions = pop_permissions_to_apply
can :view, Pop
can(pop_permissions, Pop, status: 0, charge: 1)
if user.charge == 'Analyst' || user.charge == 'Coordinator'
can(pop_permissions, Pop, status: 0, charge: 2)
end
if user.charge == 'Coordinator'
can(pop_permissions, Pop, status: 0, charge: 3)
end
#####
def pop_permissions_to_apply
permissions = [:show, :read, :view, :index]
user_that_can_print = user.kind == 'User' && user.print == 'Yes'
if user_that_can_print || user.kind == 'Editor'
permissions.push :index_pdf
end
if user.kind == 'Editor'
permissions.push :edit
end
permissions
endhttps://stackoverflow.com/questions/48522616
复制相似问题