数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载导读Mathesar 的用户数据类型user data type让你能直接在数据库表中存储对 Mathesar 用户的引用整型用户 ID从而轻松记录谁创建了记录谁负责这项任务谁最后编辑了这条记录等信息。本文以官方用户指南 docs/docs/user-guide/user-type.md 为主体结合前端抽象类型配置、Django 数据模型、RPC 元数据接口与表单注入逻辑等仓库源码系统讲解用户列的添加、用户选择、显示字段配置、默认值设置、编辑追踪user tracking以及表单限制与典型用例帮助你在一张表里完整落地责任人与审计需求。用户数据类型概览用户数据类型把某条记录关联到某个 Mathesar 用户这件事以原生列的形式融入你的 PostgreSQL 数据表。其核心特性如下底层存储用户列实际存储的是 Mathesar 用户的 ID整数值。在前端抽象类型配置中user 类型的defaultDbType即DB_TYPES.INTEGER见 mathesar_ui/src/stores/abstract-types/type-configs/user/user.ts也就是数据库层面仍然是一个整数列只是由 Mathesar 的元数据层赋予其用户引用语义。展示方式用户列中的用户默认以用户名username展示也可以在列检查器column inspector中切换为显示名display name或邮箱email。可选范围只有**该数据库的协作者collaborator**才能被存入用户列。用户选择对话框record selector只会列出当前数据库的协作者。交互方式编辑单元格时会弹出一个可搜索的协作者列表供你选择。默认值用户列支持无默认值或指定默认用户两种默认值策略。编辑追踪每张表可以指定一个用户列自动记录谁最后编辑了每条记录。后端通过ColumnMetaData.user_display_field与TableMetaData.user_tracking_attnum两个字段承载上述配置见 mathesar/models/base.py 与 mathesar/models/base.py它们由迁移文件 mathesar/migrations/0011_columnmetadata_user_type.py 引入是用户类型功能的元数据基石。添加用户列添加用户列的方式与添加其他类型的列完全一致不需要任何 SQL 操作打开要添加用户列的表。点击Add Column图标。在列类型中选择User并为列命名例如Instructor、Assigned To。保存更改。创建完成后该列的每个单元格都可以直接在 Mathesar UI 中选择一个用户。从前端视角看用户类型的单元格渲染由UserCell.svelte承担见 mathesar_ui/src/components/cell-fabric/data-types/components/user/UserCell.svelte它会在单元格中展示用户的显示标签并提供下拉按钮唤起用户选择。选择用户点击空单元格单击、已有值单元格双击或单击激活后的下拉按钮用户单元格会打开一个可搜索的协作者列表点击空的用户单元格或双击已有值的单元格。弹出当前数据库协作者的可搜索列表。输入关键词按用户名、显示名或邮箱搜索用户。点击某个用户即可选中也可以通过该对话框清除已有选择。只有当前数据库的协作者才会出现在这个列表里。要让某个 Mathesar 用户变得可被选择需要先把他添加为该数据库的协作者collaborator详见 docs/docs/user-guide/collaborators.md。从源码实现看单元格的搜索候选来自CollaborationFeaturesContext提供的协作者 storeUserCell.svelte中collaboratorsApiStore解析出的协作者列表被映射为users再交给行选择器row seeker做可搜索选择见 UserCell.svelte。行选择器通过acquireUserSelection返回一个SummarizedRecordReference选中后以用户 ID 写入单元格值见 mathesar_ui/src/systems/row-seeker/RowSeekerController.ts。值得留意的是如果单元格里存的是一个已不在协作者列表中的用户 ID例如该用户被移除了数据库协作者权限UserCell会显示一条broken link提示——带警告图标、ID 以删除线展示并提示This user does not exist or is not a collaborator on this database对应国际化文案见 mathesar_ui/src/i18n/languages/en/dict.json。这说明展示层对用户已失效的情况做了显式兜底。配置显示选项Display Options用户列展示的是哪个字段可在列检查器中配置。默认展示用户名也可切换为显示名或邮箱打开包含用户列的表。点击列头打开列检查器column inspector。在Display Options一节中找到Field to represent each user。从三个选项中选择Username默认用户的登录用户名Display Name用户的完整姓名full_nameEmail用户的邮箱地址选定的显示字段会贯穿 Mathesar 全局生效——无论是表格单元格、记录摘要还是其他引用该列值的地方都会按该字段展示。该配置的前端定义位于用户类型的显示配置表单中displayField变量的枚举为[full_name, email, username]默认值为username见 mathesar_ui/src/stores/abstract-types/type-configs/user/user.ts。保存后该值会作为列元数据user_display_field写入后端determineDisplayOptions返回{ user_display_field: ... }见 user.ts。后端展示逻辑在 mathesar/utils/user_display.py 中实现get_user_display_values批量查询 DjangoUser模型按full_name/email/username取属性并组装显示值见 user_display.pyget_user_linked_record_summaries则扫描列元数据中所有设置了user_display_field的列把记录结果里的用户 ID 批量转换为显示标签见 user_display.py。对应的单元测试覆盖了空 ID、单用户/多用户、缺失字段、空字段值、null 值等边界情况见 mathesar/tests/utils/test_user_display.py。前端getUserLabel也遵循同一逻辑当所选字段为空时回退显示用户 ID见 mathesar_ui/src/utils/userUtils.ts。设置默认值用户列支持两种默认值策略配置位置在列检查器的Default Value一节无默认值No default列没有默认值每条记录都必须由用户手动选择。适合创建人这类无法预设的场景。指定默认用户Set a default user为新建记录设置一个固定的默认用户。当创建新记录时该列会自动填充为你选定的用户。设置步骤打开用户列的列检查器。在Default Value一节选择Set a default user。在弹出的用户选择对话框中选择用户。保存更改。这一机制非常适合任务指派类场景例如把某个项目的Assigned To列默认设为项目经理新记录创建即自动归属。追踪谁编辑了记录User Tracking每张表可以指定一个用户类型列用于自动记录谁最后编辑了这条记录。与默认值不同这是表级配置而不是列级配置打开要追踪编辑操作的表。打开Table Inspector找到User tracking一节。从下拉列表中选择一个用户列选择None可关闭追踪。设置之后Mathesar 会在每次新增或编辑记录时把当前登录用户写入该列——包括通过表单提交产生的修改。被追踪的列在 UI 中不可手动编辑。几点重要约束当前操作者必须是该数据库的协作者追踪列才会被填充。每张表同时只能指定一个追踪列表内任意用户类型列都可作为候选。追踪只覆盖经由 Mathesar 的修改通过 Mathesar含表单修改记录会更新该列绕过 Mathesar 的直接数据库写入不会触发更新。源码层面的实现追踪配置存储于TableMetaData.user_tracking_attnum即被追踪列在表中的 attnum属性编号。RPC 端点tables.metadata.list/tables.metadata.set负责读写该元数据TableMetaDataBlob.user_tracking_attnum的注释明确写道When set, adding or patching a record will automatically populate this column with the current users ID见 mathesar/rpc/tables/metadata.py。写入路径的关键实现在apply_track_editing_user当表元数据存在user_tracking_attnum时把记录定义中的该列值直接替换为当前user_id见 mathesar/utils/user_display.py。表单提交场景则由_inject_user_tracking_fields兜底它会为表单中每个插入上下文按table_oid/parent_key/depth分组查找user_tracking_attnum若表单字段未显式覆盖该列就注入一个合成字段把该列设为当前用户 ID见 mathesar/utils/forms.py。这正是通过表单提交也会自动填充追踪列的底层原因与文档中的提示完全对应。已知限制用户列不能用于表单用户类型列不能被添加到 表单forms 中原因在于表单可以匿名提交而读取 Mathesar 用户列表需要身份认证匿名场景下用户字段无法正常工作。如果你尝试把用户列加入表单会看到错误提示表单字段选项中会自动排除用户列。需要区分的是追踪列不受此限制。即便某张表指定了追踪用户列且该字段不能出现在表单里表单提交被处理时该列仍会被自动填充如上文_inject_user_tracking_fields所述。从代码看表单字段校验层面对用户显示类错误有专门处理ErrorField.ts中定义了错误码COLUMN_USER_DISPLAY: -31027消息文案为form_field_column_user_display见 mathesar_ui/src/systems/data-forms/form-maker/data-form-utilities/fields/ErrorField.ts印证了用户列不适用于表单字段的设计约束。典型用例用户列在以下场景中最有价值记录归属追踪记录谁创建/拥有这条记录如Created By、Assigned To。审计轨迹通过表级User tracking设置指定一个用户列记录谁最后修改了记录。任务分配把任务或条目指派给特定用户。审批工作流记录谁批准/审查了这条记录。以一张Projects项目表为例可以这样组合使用Assigned To列默认值设为某位项目经理的 Mathesar 用户新建项目自动归属。Last Modified By列指定为表的追踪用户列任何经 Mathesar 的增改都会自动记录操作者。总结Mathesar 的用户数据类型将用户引用变成一种一等公民的列类型底层以整数存储用户 ID上层通过列元数据user_display_field控制展示字段、通过表元数据user_tracking_attnum实现编辑追踪并在前端提供可搜索的协作者选择器与失效用户兜底提示。结合表单注入逻辑追踪列甚至能在匿名表单提交时依然被正确填充。对于需要责任人、审计、指派的协作型数据管理场景用户列是开箱即用的一站式方案。赞分享数据库后端前端协作【免费下载链接】mathesarAn intuitive spreadsheet-like interface that lets users of all technical skill levels view, edit, query, and collaborate on Postgres data directly. 100% open source and self hosted, with native Postgres access control.项目地址https://gitcode.com/gh_mirrors/ma/mathesar点击查看免费下载相关推荐Mathesar 0.10.0 版本详解User 数据类型、最后编辑者追踪与 PostgreSQL ENUM 完整支持Mathesar 0.10.0 版本详解User 数据类型、最后编辑者追踪与 PostgreSQL ENUM 完整支持 Mathesar 0.10.0 是面向数据库后端前端协作ImHex数据解释器完全指南多种数值类型显示与编辑支持ImHex数据解释器完全指南多种数值类型显示与编辑支持 ImHex是一款功能强大的十六进制编辑器专为逆向工程师、程序员和需要深度数据分析的用户设计。其中 数桌面应用开发工具逆向工程terraform-aws-eks 用户数据与节点引导User Data Bootstrapping完整指南terraform aws eks 用户数据与节点引导User Data Bootstrapping完整指南 导读 本文聚焦 terraform aws云原生IaC容器编排集群管理上一篇免费法线贴图生成器实测拖一张灰度图进去5分钟让模型拥有凹凸质感下一篇Vue Flow 连接校验Connection Validation实战指南从 Handle 到全局的三种拦截方案创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考