用户管理 (.users)#
预计阅读时间:10分钟
你将学习的内容#
本指南旨在帮助您熟悉PySyft的用户API。您将学习:
访问、注册、更新和删除用户账户
配置注册选项
更新用户账户的登录凭证
Syft中的用户角色#
一个域有三种账户类型:
ADMIN - 用于内部数据站点管理员和数据所有者
DATA_SCIENTIST - 用于外部研究人员(访问数据)
访客 - 用于外部用户
它们根据拥有的权限进行区分。以下是权限表的快速参考:
创建用户 |
用户列表 |
更新用户 |
删除用户 |
|
|---|---|---|---|---|
|
✅ |
✅ |
✅ |
✅ |
|
🚫 |
🚫 |
✔️* |
🚫 |
|
🚫 |
🚫 |
✔* |
🚫 |
* DATA_SCIENTIST 和 GUEST 账户只能更新自己的信息
您可以通过Syft 客户端与数据站点进行交互。
账户登录#
登录数据站点最直接的方式是通过实例化一个客户端,使用sy.login()函数,该函数需要账户凭证(邮箱/密码)。
先决条件
以下代码片段假设您已部署了一个Datasite。
Show code cell source
import syft as sy
conn = sy.orchestra.launch(name="local_domain", port="auto", dev_mode=False, reset=True)
import syft as sy
admin_client = sy.login(
url='localhost',
port = conn.port,
email="[email protected]",
password="changethis",
)
管理员也可以以其他用户或访客用户身份登录。
ds_client = admin_client.login_as('[email protected]')
guest_client = admin_client.login_as_guest()
修改登录凭证#
尽快更改账户的默认密码(或创建账户时指定的密码)非常重要。这可以通过client.account.set_password()函数实现。
admin_client.account.set_password('new_password', confirm=False)
此选项适用于所有账户类型。此外,作为管理员,您可以使用下方详述的users.update()函数来更改账户的登录凭据。
用户配置文件的增删改查操作#
创建用户#
只有ADMIN用户才能创建新账户。
新用户账户可以通过client.users.create()函数创建,该函数具有以下签名:
client.users.create(user_create: UserCreate)
user_create 参数是一个 UserCreate 对象,该对象将通过以下参数进行实例化:
id: str- 由PySyft自动生成name: str- 与新账户关联的名称email: str- 与新账户关联的电子邮件地址password: str- 与新账户关联的密码institution: str (optional)website: str (optional)role: ServiceRole- 可以是以下之一:ADMIN、GUEST或DATA_SCIENTIST(默认值)
from syft.service.user.user import UserCreate, ServiceRole
admin_client.users.create(
name='John Doe',
email='[email protected]',
password='password',
role=ServiceRole.DATA_SCIENTIST
)
查看已注册用户#
只有ADMIN用户才能列出Datasite上可用的用户。
您可以通过客户端对象查看Datasite上注册用户的列表。
users = admin_client.users
users
您可以通过从client.users对象中选择用户来执行各种操作。
# Select the second user in the list
users[1]
# Select a user with a specific email
email = '[email protected]'
user = [u for u in users if u.email == email][0]
user.name
更新用户信息#
只有ADMIN用户可以更新其他用户的信息。所有用户类型都可以更新自己的信息。
用户的信息可以通过client.users.update()函数进行更新,该函数具有以下签名。
client.users.update(uid: str, user_update: UserUpdate)
uid 参数是您想要更新的账户ID。
user_udpate 参数是一个 UserUpdate 对象,它将使用与 UserCreate 相同的参数进行实例化。不过,只需指定需要更新的字段。
from syft.service.user.user import UserUpdate, ServiceRole
user = admin_client.users[1]
admin_client.users.update(
uid=user.id,
name='Updated John Doe',
password='123456789',
role=ServiceRole.GUEST
)
每位用户,无论其账户类型如何,都可以通过client.account.update()函数更新自己的信息。
# Example
admin_client.account.update(name='Updated Admin')
删除用户#
ADMIN 用户可以删除任何其他用户。
用户可以通过client.user.delete()函数删除,该函数的签名如下:
client.users.delete(uid: str)
uid 参数是您想要删除的账户ID。
admin_client.users
user = admin_client.users[1]
admin_client.users.delete(user.id)
admin_client.users
通知#
PySyft可以在数据访问/处理工作流中为各类事件发送通知。目前仅支持电子邮件通知,但未来版本将包含其他类型的通知(短信、Slack等)。
您可以通过检查client.account.notifications_enabled对象来确认您的账户是否启用了通知功能:
admin_client.account.notifications_enabled
有关通知的更多详情,例如启用或禁用通知,请查阅Notifications API指南
配置注册工作流程#
ADMIN 用户可以在两种注册流程之间切换:
手动注册 (默认): 保持您的数据站点私有并手动添加新用户
自助注册服务: 让您的数据站点可被发现,任何访客都能创建新的
DATA_SCIENTIST账户

管理员可以通过client.settings.allow_guest_signup()函数在这两种注册流程之间切换,该函数的签名如下:
client.settings.allow_guest_signup(enable: bool)
当enable设置为False时,工作流切换为手动注册模式;当enable设置为True时,工作流切换为自助服务注册模式,且数据站点将变为可被发现状态。
# Switch to MANUAL registration
admin_client.settings.allow_guest_signup(enable=False)
# Switch to SELF-SERVICE registration (the Datasite becomes discoverable)
admin_client.settings.allow_guest_signup(enable=True)
当Datasite可被发现时,数据科学家可以连接到Datasite,并在domain.register()函数的帮助下注册他们的账户,该函数接受以下参数:
name: stremail: strpassword: strpassword_verify: str- 必须与password的值相同institution: str (可选)website: str (optional)
import syft as sy
# Connect to the discoverable Datasite
discoverable_domain = sy.connect(url='localhost', port=conn.port)
discoverable_domain.register(
name='Curious Scientist',
email='[email protected]',
password='data_scientist_password',
password_verify='data_scientist_password',
)
注册后,会创建一个DATA_SCIENTIST用户,可以通过客户端访问。
admin_client.users
ds_client = sy.login(
url='localhost',
port=conn.port,
email="[email protected]",
password="data_scientist_password",
)
ds_client