@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']))