我的应用中有三个角色: root-user> kubectl get services --all-namespaces -o wide
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE SELECTOR
default kubernetes ClusterIP 100.24.1.0 <none> 443/TCP 26d <none>
default registration-service ClusterIP None <none> 8080/TCP 18d app=registration-service
default app-framework ClusterIP None <none> 24366/TCP 25d app=app-framework
default stt LoadBalancer 100.56.9.26 a548cdb75447611e897960efe53682ba-1445165219.us-east-2.elb.amazonaws.com 8443:31327/TCP 3d app=stt
kube-system kube-dns ClusterIP 100.46.0.10 <none> 53/UDP,53/TCP 26d k8s-app=kube-dns
kube-system kubernetes-dashboard ClusterIP 100.96.205.42 <none> 443/TCP 26d k8s-app=kubernetes-dashboard
,admin
和dev
。在我的标题中,client
可以访问与dev
相同的标签。
我试过了:
admin
适用于li = link_to 'Mon compte', client_edit_infos_path unless current_client.role == 'admin' || 'dev'
和admin
个角色,但不适用于dev
角色。
有人可以告诉我另一种方法来授权两个角色并限制一个吗?
答案 0 :(得分:1)
%w(admin dev).include?(current_client.role)
答案 1 :(得分:1)
请使用授权gem,例如:https://github.com/CanCanCommunity/cancancan
手动操作非常容易出错并且不易维护。
您只需要定义自己的能力:
然后在你的代码中:
<% if can? :update, @client_info %>
<%= link_to "Mon compte", client_edit_infos_path %>
<% end %>
另外,不要忘记在控制器操作中设置相同的限制!否则,用户可以绕过您的视图并手动触发您的操作,并可以访问他们不应该访问的内容。
答案 2 :(得分:0)
是的,您可以向||添加尽可能多的参数运营商.. 结果如果任何条件变为真,它将返回true 请参阅此http://www.dummies.com/programming/c/how-to-create-multiple-comparisons-with-logic-in-c-programming/ 希望这会帮助你
答案 3 :(得分:0)
对于一个实际的解决方案,我建议其他一个答案,但这里的方法是如何按照你原来的意图(也就是说出错了)。
问题在于行尾的条件:unless current_client.role == 'admin' || 'dev'
红宝石在这里做的不是你的想法; 'admin' || 'dev'
评估为'admin'
,因此整个条件相当于unless current_client.role == 'admin'
。
||
运算符的工作方式是:
例如,true || false
评估为true,'hello' || 'world'
为'hello'
,nil || 'world'
评估为&#39; world&#39;。
正确的条件是unless current_client.role == 'admin' or current_client.role == 'dev'
or
与||
的效果相同,但与higher precedence相同。