开发手册 欢迎您!
软件开发者资料库

Web2py - 访问控制

Web2py访问控制 - 从简介,Python语言,框架概述,核心,视图,数据库抽象层,表单和验证器,电子邮件和SMS,访问控制,服务,添加AJAX效果,组件,部署,安全性开始学习Web2py。

身份验证

几乎每个应用程序都需要能够对用户进行身份验证并设置权限. web2py附带了一个广泛且可自定义的基于角色的访问控制 mechanism.web2py .它还支持协议,例如CAS,OpenID,OAuth 1.0,LDAP,PAM,X509等等.

web2py包含一种称为基于角色的访问控制机制(RBAC)的机制这是一种限制授权用户的系统访问的方法.实现RBAC的web2py类称为Auth.

查看下面给出的模式.

Auth

Auth 定义以下表格 :

Sr.No表名&说明
1

auth_user

存储用户的姓名,电子邮件地址,密码和状态.

2

auth_group

为多个用户存储用户的组或角色许多结构

3

auth_membership

以多对多结构存储链接用户和组的信息

4

auth_permission

该表链接组和权限.

5

auth_event

记录其他表中的更改并成功访问

6

auth_cas

它用于中央身份验证服务

自定义验证

有两种方法可以自定义验证.

  • 从头开始定义自定义 db.auth_user 表.

  • 让web2py定义 auth 表.

让我们看看最后一个定义方法 auth 表.在 db.py 模型中,替换以下行 :

  auth.define_tables()

将其替换为以下代码 :

auth.settings.extra_fields['auth_user'] = [   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),   Field('address','text')]auth.define_tables(username = True)

假设每个用户都包含电话号码,用户名和地址.

auth.settings.extra_fields 是一个额外字段的字典.键是要添加额外字段的auth表的名称.该值是额外字段的列表.在这里,我们添加了两个额外字段, phone_number和地址.

用户名必须以特殊方式处理,因为它参与身份验证过程,通常基于电子邮件字段.通过将username参数传递给以下行,它会通知web2py我们需要用户名字段,我们希望将其用于登录而不是电子邮件字段.它就像一把主键.

  auth.define_tables(username = True)

用户名被视为唯一值.可能存在在正常注册表格之外进行注册的情况.它也是这样,新用户被迫登录,以完成他们的注册.

这可以使用设置的虚拟字段 complete_registration 来完成默认为 False ,并且在更新其个人资料时设置为 True .

auth.settings.extra_fields['auth_user'] = [   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),   comment = "i.e. 123-123-1234"),   Field('address','text'),   Field('complete_registration',default = False,update = True,   writable = False, readable = False)]auth.define_tables(username = True)

这种情况可能会让新用户在登录时完成注册.

db.py 中,在models文件夹中,我们可以附加以下代码 :

if auth.user and not auth.user.complete_registration:if not (request.controller,request.function) == ('default','user'):   redirect(URL('default','user/profile'))

这会强制新用户根据要求编辑他们的个人资料.

授权

这是向用户授予某些访问权限或授予权限的过程.

创建或注册新用户后,在web2py中创建一个新组包含用户.新用户的角色通常称为"user_ [id]",其中id是用户的唯一标识.

创建的默认值新组的结果是 :

  auth.settings.create_user_groups ="user _%(id)s"

可以通过 :

  auth.settings.create_user_groups禁用用户之间的组创建=无

创建,授予对特定成员和权限的访问权限,可以通过appadmin的帮助以编程方式实现.

一些实现列出如下 :

Sr.NoCommand&用法
1

auth.add_group('角色','描述')

返回新创建的组的ID.

2

auth.del_group(group_id)

删除具有指定ID的组

3

auth.del_group(auth.id_group('user_7'))

删除具有给定标识的用户组.

4

auth.user_group(user_id)

返回给定用户唯一关联的组ID的值.

5

auth.add_membership(group_id,user_id)

返回值给定group_id的user_id

6

auth.del_membership(group_id,user_id)

撤消对给定member_id的访问权限,即user_id来自给定的组.

7

auth.has_membership(group_id,user_id,role)

检查user_id是否属于给定的组.

中央认证服务(CAS)

web2py提供行业标准,即客户端认证服务 - 客户端和客户端的CAS服务器内置web2py.它是第三方认证工具.

它是一种用于分布式认证的开放协议. CAS的工作如下<

  • 如果用户访问网站,协议将检查用户是否经过身份验证.

  • 如果用户未对应用程序进行身份验证,则协议会重定向到用户可以注册或登录应用程序的页面.

  • 如果注册完成,用户会收到一封电子邮件.除非用户验证电子邮件,否则注册不会完成.

  • 注册成功后,用户将使用CAS设备使用的密钥进行身份验证.

  • 该密钥用于通过HTTP请求获取用户凭据,该请求在后台设置.