@ auth.requires_permission不工作ver 2

时间:2015-10-13 23:35:03

标签: authentication web2py

所有web2py专家的好日子!

我找不到如何使用web2py装饰器的方法

@auth.requires_permission('read','person')
def f(): ....

在pdf手册中说:

  除非访问者是会员,否则

会阻止访问者访问功能f   一个组的成员拥有"读取" 表格的权限   的"人" 即可。如果访问者未登录,则访问者将被定向到登录   页面(默认由web2py提供)。 web2py还支持组件,   即可以在视图中加载并通过访问者与访问者交互的动作   Ajax无需重新加载整个页面。这是通过LOAD助手完成的   允许非常模块化的应用设计;它将在第3章中讨论   维基的上下文,并且在本书的最后一章中有详细介绍。   本书的第5版描述了web2py 2.4.1及更高版本

就我而言:

我有群组列表:Admin_Tier_1,Admin_Tier_2,Admin_Tier_3

Admin_Tier_1 - 拥有访问所有功能的最高权限,例如添加学年,设置学年等。

Admin_Tier_2 - 有权添加学生等

Admin_Tier_3 - 最低级别的权限,只能向学生(组织人员)添加罚款

现在我使用这样的Decorator代码:

@auth.requires_permission('Admin_Tier_1','student_list')
def add(): ....

现在我登录在auth_membership中注册为Admin_Tier_1的主席帐户。然后我点击链接"学生名单"重定向到add():function但系统返回了一条消息:

Not Authorized
     Insufficient privileges

2 个答案:

答案 0 :(得分:0)

问题解决了:

@auth.requires(auth.has_membership('Admin_Tier_1') or auth.has_membership('Admin_Tier_2'))

来源here

每当我访问该页面时,如果用户属于Admin_Tier_3组,则系统阻止访问并将其重定向到" / default / user / not_authorized"页面:)

答案 1 :(得分:0)

auth.requires()方法可以采用可调用而不是布尔值作为条件,这在生成布尔值很昂贵时更为可取(否则,每当访问控制器时都会生成布尔值,即使特定的装饰功能不是被称为的那个)。因此,为避免不必要地调用auth.has_membership,您可以执行以下操作:

@auth.requires(lambda: auth.has_membership('Admin_Tier_1') or
                       auth.has_membership('Admin_Tier_2'))

现在只有在调用正在装饰的实际函数时才会进行两次auth.has_membership调用。

此外,如果您需要检查更多角色,您可以执行以下操作:

@auth.requires(lambda: any([auth.has_membership(r) for r in ['list', 'of', 'roles']))