📜  Web2py-访问控制

📅  最后修改于: 2020-10-17 05:20:54             🧑  作者: Mango


认证方式

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

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

查看下面给出的模式。

验证码

Auth定义了以下表格-

Sr.No Table Name & Description
1

auth_user

stores users’ name, email address, password, and status.

2

auth_group

stores groups or roles for users in a many-to-many structure

3

auth_membership

Stores the information of links users and groups in a many-to-many structure

4

auth_permission

The table links groups and permissions.

5

auth_event

logs changes in the other tables and successful access

6

auth_cas

It is used for Central Authentication Service

自定义身份验证

自定义身份验证有两种方法。

  • 从头开始定义自定义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是额外字段的字典。密钥是要向其添加额外字段的身份验证表的名称。该值是额外字段的列表。在这里,我们添加了两个额外的字段, phone_number和address

用户名必须以特殊方式处理,因为它涉及身份验证过程,该过程通常基于电子邮件字段。通过将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 = None

还可以通过appadmin的编程方式来创建,授予对特定成员的访问权限和权限。

下面列出了一些实现-

Sr.No Command & Usage
1

auth.add_group(‘role’, ‘description’)

returns the id of the newly created group.

2

auth.del_group(group_id)

Deletes the group with the specified id

3

auth.del_group(auth.id_group(‘user_7’))

Deletes the user group with the given identification.

4

auth.user_group(user_id)

Returns the value of id of group uniquely associated for the given user.

5

auth.add_membership(group_id, user_id)

Returns the value of user_id for the given group_id

6

auth.del_membership(group_id, user_id)

Revokes access of the given member_id i.e. user_id from the given group.

7

auth.has_membership(group_id, user_id, role)

Checks whether user_id belongs to the given group.

中央认证服务(CAS)

web2py为客户端和服务器内置的web2py提供了一个行业标准,即客户端身份验证服务– CAS。它是第三方身份验证工具。

它是用于分布式身份验证的开放协议。 CAS的工作如下-

  • 如果用户访问该网站,则协议将检查用户是否已通过身份验证。

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

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

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

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