Datasette的高级权限管理
项目描述
datasette-acl
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-row
和update-row
权限。
它设置了一个动态组,以便任何JSON中包含{"is_staff": true}
的演员都将被视为该组的成员。
--reload
表示Datasette将在插件代码更改时重新加载,而--secret 1
确保您的Datasette身份验证cookie在服务器重启后仍然有效。
项目详情
下载文件
下载您平台上的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。