跳转到主要内容

Datasette的高级权限管理

项目描述

datasette-acl

PyPI Changelog Tests License

Datasette的高级权限管理。 高度实验性

安装

在Datasette相同的环境中安装此插件。此插件需要Datasette 1.0a15或更高版本。

datasette install datasette-acl

用法

此插件正在积极开发中。它目前仅支持配置权限,用于单个表格,控制以下内容

  • 插入行
  • 删除行
  • 更新行
  • 修改表
  • 删除表

权限保存在内部数据库中。这意味着您应该使用--internal path/to/internal.db选项运行Datasette,否则您的权限将在每次重启Datasette时重置。

管理表格的权限

配置表格权限的界面位于/database-name/table-name/-/acl。可以从表格页面上的表格操作菜单访问。

可以为上述每个表格操作授予权限。它们可以分配给组和单个用户,用户可以使用其actor["id"]添加。

审计日志跟踪添加和删除的权限,显示在表格权限页面底部。

控制谁可以编辑权限

拥有新 datasette-acl 权限的用户将能够访问一个用户和组在表上设置权限的UI。

要配置root用户拥有此权限,请将以下内容添加到您的Datasette配置中

permissions:
  datasette-acl:
    id: root

或者您可以这样启动Datasette

datasette mydata.db --root --internal internal.db \
  -s permissions.datasette-acl.id root

用户组

用户可以被分配到组中,然后可以使用这些组一次性快速为所有这些用户分配权限。

要管理您的组,请访问 /-/acl/groups 或在Datasette应用程序菜单中使用“管理用户组”项目。

通过输入他们的actor ID将用户添加到组中。使用移除用户按钮移除他们。

每个组的页面都包括一个审计日志,显示对该组成员列表所做的更改。

当您删除一个组时,其成员将被全部删除,并且该组将被标记为已删除。创建一个具有相同名称的组将重用该组的记录并显示其现有的审计日志,但不会重新添加已删除的成员。

动态组

您可能希望根据actor的属性定义针对actor组的权限规则,而无需手动将这些actor添加到组中。这可以通过在 datasette-acl 配置中定义动态组来实现。

动态组是根据 允许块 定义的。以下配置定义了两个动态组 - 一个名为 admin,包含所有具有 "is_admin": true 属性的用户,另一个名为 sales,明确包含具有 "sales" 作为其 departments 数组中值的用户。

plugins:
  datasette-acl:
    dynamic-groups:
      admin:
        is_admin: true
      sales:
        departments: ["sales"]

每次actor检查其权限时,他们将被动态添加到或从这些组中删除,具体取决于他们actor属性当前的值。

动态组会显示在组列表中,但它们的成员不能手动添加或删除。

表创建者权限

如果您允许普通用户在Datasette中创建表,您可能希望他们保持对这些表的一定程度的“所有权”,这样其他用户就无法在未获得创建者许可的情况下修改这些表。

可以使用 table-creator-permissions 插件设置来自动配置创建表的actor的权限。

启用方法如下

plugins:
  datasette-acl:
    table-creator-permissions:
    - alter-table
    - drop-table
    - insert-row
    - update-row
    - delete-row

针对actor ID配置自动完成

默认情况下,此插件的用户可以通过输入ID来分配任何actor ID的权限,无论该ID是否对应于当前Datasette配置中存在的用户。

如果您在一个具有固定、已知actor ID列表的环境中运行此插件,您可以实现一个插件,使用 datasette_acl_valid_actors(datasette) 插件钩子,该钩子返回一个字符串actor ID的可迭代序列或 {"id": "actor-id", "display": "Actor Name"} 字典

这些将用于验证和自动完成,确保用户不会附加不在该列表中的actor ID。

示例插件实现

from datasette import hookimpl

@hookimpl
def datasette_acl_valid_actors(datasette):
    return ["paulo", "rohan", "simon"]

此函数还可以返回一个异步内部函数,用于进行异步调用。此示例使用 [{"id": "actor-id", "display": "Actor Name"}] 格式

from datasette import hookimpl

@hookimpl
def datasette_acl_valid_actors(datasette):
    async def inner():
        db = datasette.get_internal_database()
        return (await db.execute("select id, username as display from users")).dicts()
    return inner

开发

要本地设置此插件,首先检出代码。然后创建一个新的虚拟环境

cd datasette-acl
python -m venv venv
source venv/bin/activate

现在安装依赖项和测试依赖项

pip install -e '.[test]'

要运行测试

python -m pytest

本地开发的技巧

这是如何启用所有功能运行插件的方法。

首先,获取测试数据库

wget https://latest.datasette.io/fixtures.db

安装datasette-unsafe-actor-debug插件,这样您就可以使用http://127.0.0.1:8001/-/unsafe-actor页面快速模拟任何演员进行测试

datasette install datasette-unsafe-actor-debug

并使用datasette-visible-internal-db以便更容易地查看内部数据库中正在发生的事情

datasette install datasette-visible-internal-db

然后按如下方式启动Datasette

datasette fixtures.db --internal internal.db \
  -s permissions.datasette-acl.id root \
  -s plugins.datasette-unsafe-actor-debug.enabled 1 \
  -s plugins.datasette-acl.table-creator-permissions '["insert-row", "update-row"]' \
  -s plugins.datasette-acl.dynamic-groups.staff.is_staff true \
  --root \
  --secret 1 \
  --reload

此配置使Datasette为您提供登录为root的URL,这将授予您访问权限编辑工具。

它确保任何创建表的用户(您可以使用/-/api API资源管理器工具进行测试)都将被授予初始的insert-rowupdate-row权限。

它设置了一个动态组,以便任何JSON中包含{"is_staff": true}的演员都将被视为该组的成员。

--reload表示Datasette将在插件代码更改时重新加载,而--secret 1确保您的Datasette身份验证cookie在服务器重启后仍然有效。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

datasette_acl-0.4a4.tar.gz (46.9 kB 查看哈希)

上传时间: 源代码

构建分发

datasette_acl-0.4a4-py3-none-any.whl (43.8 kB 查看哈希)

上传时间: Python 3

支持者:

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面