我有一个应用程序,我正在使用web2py的访问控制系统。我在 auth_user 表中有各种用户。更具体地说,我有 admin1@mysite.com 用户,其ID为4. auth_group 表中有一个组 admin ,其组ID为1 。在 auth_membership 表中,我 user_id 4与 group_id 相关1.这意味着 admin1@mysite.com 是一个 admin 组的成员。最后在 auth_permission 表中,我有一条记录,其中 group_id 1与名为搜索的权限相关联。这表示 admin 组具有搜索权限。我有一个控制器,我在其中使用装饰器的索引方法为 @ auth.requires_permission('search')。我正在使用 admin1@mysite.com 登录并使用此控制器方法。但是这个条件评估为false并且控制不进入方法内部。但是,如果我用一个 @ auth.requires_login()替换这个装饰器就行了。但我希望只有具有搜索权限的用户才能访问此方法。请帮助我实现这一目标。
答案 0 :(得分:0)
在db.auth_permission
表格中输入记录时,除table
字段外还有name
字段(注意,table
无需参考数据库表 - 它可以是表示任何类型对象的任何名称。选中权限后,name
和table
都必须匹配。
如果您通过appadmin界面或使用auth.add_permission(1, 'search')
插入权限记录,则table
字段将设置为空字符串(即'')。这样可行,因为当你执行@auth.requires_permission('search')
时,这相当于@auth.requires_permission('search', '')
,它与权限记录中的空字符串匹配。
但是,如果您通过db.auth_permission.insert(group_id=1, name='search')
插入,那么table
字段将设置为None
,当您检查权限时,该字段将与空字符串不匹配。