用户管理 (.users)#

预计阅读时间:10分钟

你将学习的内容#

本指南旨在帮助您熟悉PySyft的用户API。您将学习:

  • 访问、注册、更新和删除用户账户

  • 配置注册选项

  • 更新用户账户的登录凭证

Syft中的用户角色#

一个域有三种账户类型:

  • ADMIN - 用于内部数据站点管理员和数据所有者

  • DATA_SCIENTIST - 用于外部研究人员(访问数据)

  • 访客 - 用于外部用户

它们根据拥有的权限进行区分。以下是权限表的快速参考:

创建用户

用户列表

更新用户

删除用户

ADMIN

DATA_SCIENTIST

🚫

🚫

✔️*

🚫

GUEST

🚫

🚫

✔*

🚫

* DATA_SCIENTISTGUEST 账户只能更新自己的信息

您可以通过Syft 客户端与数据站点进行交互。

账户登录#

登录数据站点最直接的方式是通过实例化一个客户端,使用sy.login()函数,该函数需要账户凭证(邮箱/密码)。

先决条件

以下代码片段假设您已部署了一个Datasite。

Hide 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 - 可以是以下之一:ADMINGUESTDATA_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账户

Registration Workflow

管理员可以通过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: str

  • email: str

  • password: str

  • password_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