@auth.requires_permission 版本 2 不工作
@auth.requires_permission not working ver 2
所有 web2py 专家大家好!
我找不到如何使用 web2py 装饰器的方法
@auth.requires_permission('read','person')
def f(): ....
在 pdf 手册中说:
prevents visitors from accessing the function f unless the visitor is a member
of a group whose members have permissions to "read" records of table
"person". If the visitor is not logged in, the visitor gets directed to a login
page (provided by default by web2py). web2py also supports components,
i.e. actions which can be loaded in a view and interact with the visitor via
Ajax without re-loading the entire page. This is done via a LOAD helper which
allows very modular design of applications; it is discussed in chapter 3 in the
context of the wiki and, in some detail, in the last chapter of this book.
This 5th edition of the book describes web2py 2.4.1 and later versions
就我而言:
我有组列表: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(): 函数的 link "List of Students" 但系统返回了一条消息:
Not Authorized
Insufficient privileges
问题已解决:
@auth.requires(auth.has_membership('Admin_Tier_1') or auth.has_membership('Admin_Tier_2'))
来源here.
每当我访问该页面时,如果用户属于 Admin_Tier_3 组,系统会阻止访问并将其重定向到“/default/user/not_authorized”页面 :)
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']))
所有 web2py 专家大家好!
我找不到如何使用 web2py 装饰器的方法
@auth.requires_permission('read','person')
def f(): ....
在 pdf 手册中说:
prevents visitors from accessing the function f unless the visitor is a member of a group whose members have permissions to "read" records of table "person". If the visitor is not logged in, the visitor gets directed to a login page (provided by default by web2py). web2py also supports components, i.e. actions which can be loaded in a view and interact with the visitor via Ajax without re-loading the entire page. This is done via a LOAD helper which allows very modular design of applications; it is discussed in chapter 3 in the context of the wiki and, in some detail, in the last chapter of this book. This 5th edition of the book describes web2py 2.4.1 and later versions
就我而言:
我有组列表: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(): 函数的 link "List of Students" 但系统返回了一条消息:
Not Authorized
Insufficient privileges
问题已解决:
@auth.requires(auth.has_membership('Admin_Tier_1') or auth.has_membership('Admin_Tier_2'))
来源here.
每当我访问该页面时,如果用户属于 Admin_Tier_3 组,系统会阻止访问并将其重定向到“/default/user/not_authorized”页面 :)
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']))