所有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
答案 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']))