Web2py 访问控制

Web2py 访问控制

验证

几乎每个应用程序都需要能够验证用户身份并设置权限。web2py提供了一个丰富且可自定义的基于角色的访问控制机制。 web2py 。它还支持一些协议,如CAS,OpenID,OAuth 1.0,LDAP,PAM,X509等等。

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

查看下面给出的模式。

Web2py 访问控制

认证 定义了以下表−

序号 表名及描述
1 auth_user 存储用户的姓名、电子邮件地址、密码和状态。
2 auth_group 以多对多的结构存储用户的组或角色。
3 auth_membership 以多对多的结构存储用户和组的关联信息。
4 auth_permission 该表链接组和权限。
5 auth_event 记录其他表的更改和成功访问。
6 auth_cas 用于中央认证服务。

定制 Auth

有两种方法可以定制 Auth。

  • 从头定义一个自定义的 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和address

username 需要特殊处理,因为它参与身份验证过程,通常基于电子邮件字段。通过将username参数传递给下面的代码行,告诉web2py我们想要username字段,我们想要将其用于登录而不是电子邮件字段。它起到主键的作用。

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 = None

使用appadmin的帮助,可以通过编程来创建、授予特定成员和权限。

以下是一些实现方式:

Sr.No Command & Usage
1 auth.add_group(‘role’, ‘description’) 返回新创建的组的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) 返回给定组id的user_id的值。
6 auth.del_membership(group_id, user_id) 从给定组中撤销给定成员id即user_id的访问权限。
7 auth.has_membership(group_id, user_id, role) 检查user_id是否属于给定的组。

Central Authentication Service(CAS)

web2py提供了一个行业标准,即客户端认证服务(Client Authentication Service – CAS),用于内置的web2py客户端和服务器。它是一个第三方认证工具。

它是一种用于分布式认证的开放协议。CAS的工作原理如下:

  • 如果用户访问网站,协议会检查用户是否已经进行身份验证。

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

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

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程