@lovrabet/rabetbase-cli 2.4.4 → 2.4.5-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/api/api-doc.js +1 -1
- package/lib/api/fetch-model-list.js +1 -1
- package/lib/api/generate-api-file.js +1 -1
- package/lib/auth/auth-server-ui.js +1 -1
- package/lib/auth/auth-server.js +1 -1
- package/lib/auth/constant.js +1 -1
- package/lib/auth/get-cookie.js +1 -1
- package/lib/auth/get-session-user.js +1 -1
- package/lib/auth/is-session-valid.js +1 -1
- package/lib/auth/login-success-html.js +1 -1
- package/lib/auth/logout.js +1 -1
- package/lib/cli-flags.js +1 -1
- package/lib/cli.js +1 -1
- package/lib/commands/api/generate.js +1 -1
- package/lib/commands/api/index.js +1 -1
- package/lib/commands/api/list.js +1 -1
- package/lib/commands/api/pull.js +1 -1
- package/lib/commands/api/shared.js +1 -1
- package/lib/commands/app/index.js +1 -1
- package/lib/commands/app/list.js +1 -1
- package/lib/commands/app/members-list.js +1 -1
- package/lib/commands/app/remote-directory.js +1 -1
- package/lib/commands/app/shared.js +1 -1
- package/lib/commands/app-config/delete.js +1 -1
- package/lib/commands/app-config/get.js +1 -1
- package/lib/commands/app-config/index.js +1 -1
- package/lib/commands/app-config/list.js +1 -1
- package/lib/commands/app-config/set.js +1 -1
- package/lib/commands/app-config/shared.js +1 -1
- package/lib/commands/auth/index.js +1 -1
- package/lib/commands/bff/create.js +1 -1
- package/lib/commands/bff/delete.js +1 -1
- package/lib/commands/bff/detail.js +1 -1
- package/lib/commands/bff/index.js +1 -1
- package/lib/commands/bff/list.js +1 -1
- package/lib/commands/bff/pull.js +1 -1
- package/lib/commands/bff/push.js +1 -1
- package/lib/commands/bff/status.js +1 -1
- package/lib/commands/cli-skill/index.js +1 -1
- package/lib/commands/cli-update.js +1 -1
- package/lib/commands/codegen/index.js +1 -1
- package/lib/commands/codegen/sdk.js +1 -1
- package/lib/commands/codegen/sql.js +1 -1
- package/lib/commands/common/app-registry.js +1 -1
- package/lib/commands/common/app-selector.js +1 -1
- package/lib/commands/common/async-task.js +1 -1
- package/lib/commands/common/dry-run.js +1 -1
- package/lib/commands/common/flags.d.ts +1 -0
- package/lib/commands/common/flags.js +1 -1
- package/lib/commands/common/local-file.js +1 -1
- package/lib/commands/common/validate.js +1 -1
- package/lib/commands/config/get.js +1 -1
- package/lib/commands/config/index.js +1 -1
- package/lib/commands/config/list.js +1 -1
- package/lib/commands/config/set.js +1 -1
- package/lib/commands/config/shared.js +1 -1
- package/lib/commands/data/filter.js +1 -1
- package/lib/commands/data/getOne.js +1 -1
- package/lib/commands/data/index.js +1 -1
- package/lib/commands/data/shared.js +1 -1
- package/lib/commands/dataset/business-group-update.js +1 -1
- package/lib/commands/{permit/index.d.ts → dataset/business-groups.d.ts} +1 -1
- package/lib/commands/dataset/business-groups.js +1 -0
- package/lib/commands/dataset/capability.js +1 -1
- package/lib/commands/dataset/delete.js +1 -1
- package/lib/commands/dataset/detail.js +1 -1
- package/lib/commands/dataset/extend-update.js +1 -1
- package/lib/commands/dataset/field-update.js +1 -1
- package/lib/commands/dataset/generate.js +1 -1
- package/lib/commands/dataset/index.js +1 -1
- package/lib/commands/dataset/list.js +1 -1
- package/lib/commands/dataset/operations.js +1 -1
- package/lib/commands/dataset/relation-audit.js +1 -1
- package/lib/commands/dataset/relation-create.js +1 -1
- package/lib/commands/dataset/relation-delete.js +1 -1
- package/lib/commands/dataset/relation-shared.js +1 -1
- package/lib/commands/dataset/relation-update.js +1 -1
- package/lib/commands/dataset/relations.js +1 -1
- package/lib/commands/dataset/rename.js +1 -1
- package/lib/commands/dataset/restore.js +1 -1
- package/lib/commands/db/analysis-batching.js +1 -1
- package/lib/commands/db/analyze-batch-plan.js +1 -1
- package/lib/commands/db/analyze-cancel.js +1 -1
- package/lib/commands/db/analyze-start.js +1 -1
- package/lib/commands/db/analyze-status.js +1 -1
- package/lib/commands/db/create.js +1 -1
- package/lib/commands/db/delete.js +1 -1
- package/lib/commands/db/detail.js +1 -1
- package/lib/commands/db/diff-refresh-start.js +1 -1
- package/lib/commands/db/diff-refresh-status.js +1 -1
- package/lib/commands/db/diff.js +1 -1
- package/lib/commands/db/index.js +1 -1
- package/lib/commands/db/list.js +1 -1
- package/lib/commands/db/shared.d.ts +15 -1
- package/lib/commands/db/shared.js +1 -1
- package/lib/commands/db/tables.js +1 -1
- package/lib/commands/db/test.js +1 -1
- package/lib/commands/db/update.js +1 -1
- package/lib/commands/doctor.js +1 -1
- package/lib/commands/file/index.js +1 -1
- package/lib/commands/init/index.js +1 -1
- package/lib/commands/issue/index.js +1 -1
- package/lib/commands/issue/nudge.js +1 -1
- package/lib/commands/issue/report.js +1 -1
- package/lib/commands/issue/shared.js +1 -1
- package/lib/commands/kb/create.js +1 -1
- package/lib/commands/kb/delete.js +1 -1
- package/lib/commands/kb/detail.js +1 -1
- package/lib/commands/kb/index.js +1 -1
- package/lib/commands/kb/list.js +1 -1
- package/lib/commands/kb/shared.js +1 -1
- package/lib/commands/kb/update.js +1 -1
- package/lib/commands/logs/index.js +1 -1
- package/lib/commands/menu/asset-update.js +1 -1
- package/lib/commands/menu/delete.js +1 -1
- package/lib/commands/menu/external-link-create.js +1 -1
- package/lib/commands/menu/external-link-update.js +1 -1
- package/lib/commands/menu/group-create.js +1 -1
- package/lib/commands/menu/group-update.js +1 -1
- package/lib/commands/menu/index.js +1 -1
- package/lib/commands/menu/list.js +1 -1
- package/lib/commands/menu/move.js +1 -1
- package/lib/commands/menu/regroup-start.js +1 -1
- package/lib/commands/menu/rename.js +1 -1
- package/lib/commands/menu/shared/compare-table.js +1 -1
- package/lib/commands/menu/shared/delete-plan.js +1 -1
- package/lib/commands/menu/shared/facts.js +1 -1
- package/lib/commands/menu/shared/index.js +1 -1
- package/lib/commands/menu/shared/inquirer.js +1 -1
- package/lib/commands/menu/shared/local-pages.js +1 -1
- package/lib/commands/menu/shared/logic.js +1 -1
- package/lib/commands/menu/shared/mutations.js +1 -1
- package/lib/commands/menu/shared/service.js +1 -1
- package/lib/commands/menu/shared/sync-core.js +1 -1
- package/lib/commands/menu/shared/update-core.js +1 -1
- package/lib/commands/menu/shared/valid-url.js +1 -1
- package/lib/commands/menu/sync.js +1 -1
- package/lib/commands/notification/config-create.js +1 -1
- package/lib/commands/notification/config-delete.js +1 -1
- package/lib/commands/notification/config-list.js +1 -1
- package/lib/commands/notification/config-update.js +1 -1
- package/lib/commands/notification/index.js +1 -1
- package/lib/commands/notification/shared.js +1 -1
- package/lib/commands/ocr/index.js +1 -1
- package/lib/commands/page/generate-start.js +1 -1
- package/lib/commands/page/generate-status.js +1 -1
- package/lib/commands/page/index.js +1 -1
- package/lib/commands/page/pull.js +1 -1
- package/lib/commands/page/push.js +1 -1
- package/lib/commands/page/react/create.js +1 -1
- package/lib/commands/page/react/detail.js +1 -1
- package/lib/commands/page/react/list.js +1 -1
- package/lib/commands/page/react/publish.js +1 -1
- package/lib/commands/page/react/shared.js +1 -1
- package/lib/commands/page/react/syntax.js +1 -1
- package/lib/commands/page/react/template.js +1 -1
- package/lib/commands/page/react/update.js +1 -1
- package/lib/commands/page/relation-audit.js +1 -1
- package/lib/commands/page/restore.js +1 -1
- package/lib/commands/page/shared.js +1 -1
- package/lib/commands/page/standard-page-status.js +1 -1
- package/lib/commands/page/sync.js +1 -1
- package/lib/commands/project/create/enhanced-guided-create.js +1 -1
- package/lib/commands/project/create/format-elapsed.js +1 -1
- package/lib/commands/project/create/main.js +1 -1
- package/lib/commands/project/create/materialize-project-template.js +1 -1
- package/lib/commands/project/create/project-name.js +1 -1
- package/lib/commands/project/create/project-template-archive.js +1 -1
- package/lib/commands/project/create/project-template-path.js +1 -1
- package/lib/commands/project/create/use-copy-project-template.js +1 -1
- package/lib/commands/project/create/use-format-code.js +1 -1
- package/lib/commands/project/create/use-install-dependencies.js +1 -1
- package/lib/commands/project/index.js +1 -1
- package/lib/commands/project/upgrade.js +1 -1
- package/lib/commands/registry.js +1 -1
- package/lib/commands/role/delete.js +1 -1
- package/lib/commands/role/detail.js +1 -1
- package/lib/commands/role/index.js +1 -1
- package/lib/commands/role/list.js +1 -1
- package/lib/commands/role/shared.d.ts +15 -17
- package/lib/commands/role/shared.js +1 -1
- package/lib/commands/role/update.js +1 -1
- package/lib/commands/role/user-add.js +1 -1
- package/lib/commands/role/user-remove.js +1 -1
- package/lib/commands/role/user-resolve.js +1 -1
- package/lib/commands/run/index.js +1 -1
- package/lib/commands/schema.js +1 -1
- package/lib/commands/sql/create.js +1 -1
- package/lib/commands/sql/delete.js +1 -1
- package/lib/commands/sql/detail.js +1 -1
- package/lib/commands/sql/exec.js +1 -1
- package/lib/commands/sql/index.js +1 -1
- package/lib/commands/sql/list.js +1 -1
- package/lib/commands/sql/pull.js +1 -1
- package/lib/commands/sql/push.js +1 -1
- package/lib/commands/sql/shared.js +1 -1
- package/lib/commands/sql/status.js +1 -1
- package/lib/commands/sql/validate.js +1 -1
- package/lib/commands/task/index.js +1 -1
- package/lib/commands/task/status.js +1 -1
- package/lib/commands/tenant/index.js +1 -1
- package/lib/commands/tenant/members-list.js +1 -1
- package/lib/commands/tenant/shared.js +1 -1
- package/lib/commands/user-account/dingding-sandbox-bind.js +1 -1
- package/lib/commands/user-account/index.js +1 -1
- package/lib/commands/workspace/add.js +1 -1
- package/lib/commands/workspace/index.js +1 -1
- package/lib/commands/workspace/remove.js +1 -1
- package/lib/config/schema.js +1 -1
- package/lib/constant/cdn.js +1 -1
- package/lib/constant/cli.js +1 -1
- package/lib/constant/defaults.js +1 -1
- package/lib/constant/domain.js +1 -1
- package/lib/constant/env.js +1 -1
- package/lib/constant/output.js +1 -1
- package/lib/constant/paths.js +1 -1
- package/lib/constant/risk.js +1 -1
- package/lib/context/app-resolver.js +1 -1
- package/lib/context/auth-resolver.js +1 -1
- package/lib/context/config-loader.js +1 -1
- package/lib/context.js +1 -1
- package/lib/core/alias-resolver.js +1 -1
- package/lib/core/api-client.d.ts +70 -79
- package/lib/core/api-client.js +1 -1
- package/lib/core/bff/config.js +1 -1
- package/lib/core/bff/file-system.d.ts +1 -0
- package/lib/core/bff/file-system.js +1 -1
- package/lib/core/bff/hash.js +1 -1
- package/lib/core/bff/lock.js +1 -1
- package/lib/core/bff/utils.js +1 -1
- package/lib/core/db-resolver.js +1 -1
- package/lib/core/page/file-system.js +1 -1
- package/lib/core/page/hash.js +1 -1
- package/lib/core/page/lock.js +1 -1
- package/lib/core/sql-index-auditor.js +1 -1
- package/lib/core/sql-sync/config.js +1 -1
- package/lib/core/sql-sync/file-system.js +1 -1
- package/lib/core/sql-sync/hash.js +1 -1
- package/lib/core/sql-sync/lock.js +1 -1
- package/lib/core/sql-sync/utils.js +1 -1
- package/lib/core/sql-validator.js +1 -1
- package/lib/errors.js +1 -1
- package/lib/framework/build-all-flags.js +1 -1
- package/lib/framework/error-output.js +1 -1
- package/lib/framework/explicit-yes.js +1 -1
- package/lib/framework/flags.js +1 -1
- package/lib/framework/help.js +1 -1
- package/lib/framework/index.js +1 -1
- package/lib/framework/output.js +1 -1
- package/lib/framework/response.js +1 -1
- package/lib/framework/runner-alias.js +1 -1
- package/lib/framework/runner.js +1 -1
- package/lib/framework/schema-export.js +1 -1
- package/lib/framework/types.js +1 -1
- package/lib/generated/build-info.d.ts +4 -4
- package/lib/generated/build-info.js +1 -1
- package/lib/help.js +1 -1
- package/lib/postinstall.js +1 -1
- package/lib/runtime/confirmation.js +1 -1
- package/lib/runtime/event.js +1 -1
- package/lib/runtime/index.js +1 -1
- package/lib/runtime/queue.js +1 -1
- package/lib/runtime/resolve.js +1 -1
- package/lib/skills/builtin-skill.js +1 -1
- package/lib/skills/main.js +1 -1
- package/lib/skills/npx-skills-add.js +1 -1
- package/lib/skills/skill-presence.js +1 -1
- package/lib/telemetry/cli-command-trace.js +1 -1
- package/lib/telemetry/cli-help-trace.js +1 -1
- package/lib/telemetry/ensure-cli-otel-config.js +1 -1
- package/lib/telemetry/register-otel-exit-shutdown.js +1 -1
- package/lib/telemetry/send-cli-trace-log.js +1 -1
- package/lib/telemetry/send-platform-issue-collect-log.js +1 -1
- package/lib/utils/ai_config.js +1 -1
- package/lib/utils/apply-jq-filter.js +1 -1
- package/lib/utils/cdn-config.js +1 -1
- package/lib/utils/check-sdk-version.js +1 -1
- package/lib/utils/cli-version-check.js +1 -1
- package/lib/utils/cli-version-policy.js +1 -1
- package/lib/utils/config.js +1 -1
- package/lib/utils/entity-with-id.js +1 -1
- package/lib/utils/file-utils.js +1 -1
- package/lib/utils/guides-cdn.js +1 -1
- package/lib/utils/http-client.js +1 -1
- package/lib/utils/is-non-interactive.js +1 -1
- package/lib/utils/logger.js +1 -1
- package/lib/utils/params.js +1 -1
- package/lib/utils/platform.js +1 -1
- package/lib/utils/rules-cdn.js +1 -1
- package/lib/utils/sleep.js +1 -1
- package/lib/utils/template-replacer.js +1 -1
- package/lib/utils/update-notice.js +1 -1
- package/lib/utils/version.js +1 -1
- package/lib/utils/with-active-cookie.js +1 -1
- package/lib/utils/write-cli-side-channel.js +1 -1
- package/package.json +1 -1
- package/skills/rabetbase/SKILL.md +18 -24
- package/skills/rabetbase/guides/database-connection-workflow.md +6 -2
- package/skills/rabetbase/references/rabetbase-dataset-business-groups.md +28 -0
- package/skills/rabetbase/references/rabetbase-dataset-delete.md +7 -5
- package/skills/rabetbase/references/rabetbase-dataset-list.md +6 -6
- package/skills/rabetbase/references/rabetbase-dataset-restore.md +5 -5
- package/skills/rabetbase/references/rabetbase-db-create.md +3 -0
- package/skills/rabetbase/references/rabetbase-db-delete.md +10 -2
- package/skills/rabetbase/references/rabetbase-db-detail.md +2 -0
- package/skills/rabetbase/references/rabetbase-db-list.md +3 -2
- package/skills/rabetbase/references/rabetbase-db-update.md +4 -2
- package/skills/rabetbase/references/rabetbase-role-list.md +9 -17
- package/skills/rabetbase/references/rabetbase-role-user-add.md +44 -16
- package/skills/rabetbase/references/rabetbase-role-user-resolve.md +2 -2
- package/skills/rabetbase.manifest.json +4 -7
- package/lib/commands/permit/index.js +0 -1
- package/lib/commands/permit/page-get.d.ts +0 -2
- package/lib/commands/permit/page-get.js +0 -1
- package/lib/commands/permit/page-set.d.ts +0 -2
- package/lib/commands/permit/page-set.js +0 -1
- package/lib/commands/permit/role-apis-set.d.ts +0 -2
- package/lib/commands/permit/role-apis-set.js +0 -1
- package/lib/commands/permit/role-menus-set.d.ts +0 -2
- package/lib/commands/permit/role-menus-set.js +0 -1
- package/lib/commands/permit/role-menus.d.ts +0 -2
- package/lib/commands/permit/role-menus.js +0 -1
- package/lib/commands/permit/shared.d.ts +0 -74
- package/lib/commands/permit/shared.js +0 -1
- package/lib/commands/role/create.d.ts +0 -2
- package/lib/commands/role/create.js +0 -1
- package/skills/rabetbase/guides/role-permit-workflow.md +0 -127
- package/skills/rabetbase/references/rabetbase-permit-page-set.md +0 -69
- package/skills/rabetbase/references/rabetbase-permit-role-apis-set.md +0 -53
- package/skills/rabetbase/references/rabetbase-permit-role-menus-set.md +0 -57
|
@@ -1,127 +0,0 @@
|
|
|
1
|
-
# 用户组与权限(role / permit)工作流
|
|
2
|
-
|
|
3
|
-
前置知识:已完成 `rabetbase auth` 登录,当前上下文已有 `appcode`。所有写操作默认输出 `compress`,先 `--dry-run` 再 `--yes`。
|
|
4
|
-
|
|
5
|
-
## 适用范围
|
|
6
|
-
|
|
7
|
-
本工作流覆盖「谁属于哪个用户组」和「某个用户组能看什么、能操作什么」两类问题:
|
|
8
|
-
|
|
9
|
-
- 建组 / 改组 / 删组(`role create/update/delete`)
|
|
10
|
-
- 把员工加入或移出用户组(`role user-add/user-remove`)
|
|
11
|
-
- 收紧或放开某用户组的菜单可见(`permit role-menus-set`)
|
|
12
|
-
- 收紧或放开某用户组的数据接口访问(`permit role-apis-set`)
|
|
13
|
-
- 配置单个页面的菜单可见 / 数据操作 / 行级可见(`permit page-set`)
|
|
14
|
-
|
|
15
|
-
不适用于:
|
|
16
|
-
|
|
17
|
-
- 平台运营态的用户账号增删、租户成员开通(那是平台账号体系,不是应用内用户组)
|
|
18
|
-
- 运行态「登录后实际能读到哪些行」的验证 —— 交给 `lovrabet data filter` 在运行态确认
|
|
19
|
-
|
|
20
|
-
## 两个必须先分清的层面
|
|
21
|
-
|
|
22
|
-
权限配置常被混为一谈,动手前先判断问题落在哪一层:
|
|
23
|
-
|
|
24
|
-
| 层面 | 回答的问题 | 事实源 / 命令 |
|
|
25
|
-
|------|-----------|--------------|
|
|
26
|
-
| **成员归属** | 某个人在不在某个用户组里 | `role user-*`(`update-user-list` 全量回写) |
|
|
27
|
-
| **能力授权** | 某个用户组能看哪些菜单 / 访问哪些接口 / 在某页能做什么 | `permit *`(菜单矩阵 / API 矩阵 / 单页槽位) |
|
|
28
|
-
|
|
29
|
-
「小张不能看财务」通常**不是**把小张移出某个组,而是收紧他所在用户组的**能力授权**。
|
|
30
|
-
|
|
31
|
-
## 角色(用户组)类型
|
|
32
|
-
|
|
33
|
-
`ADMIN` / `DEV` / `USER` 为内置,`CUSTOM` 为用户创建。守卫规则:
|
|
34
|
-
|
|
35
|
-
- `role update` / `role delete`:**仅 `CUSTOM`**;对 `DEV` / `ADMIN` / `USER` 会被 validation 拒绝。
|
|
36
|
-
- `permit role-menus-set` / `role-apis-set`:**DEV / ADMIN 的权限矩阵不可改**,会被拒绝(内置角色按设计保持全量访问)。
|
|
37
|
-
- `role user-add` / `user-remove`:成员增删对**所有角色**可用(包括把人加进 DEV)。
|
|
38
|
-
|
|
39
|
-
要「限制某类人」时,正确姿势是新建或选用一个 `CUSTOM` 组,配它的能力,再把人放进去,而不是去改内置角色。
|
|
40
|
-
|
|
41
|
-
## 决策树:我要解决什么问题 → 用什么命令
|
|
42
|
-
|
|
43
|
-
```text
|
|
44
|
-
需要改「谁在组里」?
|
|
45
|
-
├─ 加人 / 移人 ──────────────→ role user-resolve(拿 userId)→ role user-add / user-remove
|
|
46
|
-
├─ 新建一个用户组 ───────────→ role create
|
|
47
|
-
├─ 改组名 / 备注 ────────────→ role update(仅 CUSTOM)
|
|
48
|
-
└─ 删除用户组 ──────────────→ role delete(仅 CUSTOM,high-risk)
|
|
49
|
-
|
|
50
|
-
需要改「某个组能看/能做什么」?
|
|
51
|
-
├─ 整个组看不到某些菜单 ─────→ permit role-menus → role-menus-set --revoke/--grant --menus
|
|
52
|
-
├─ 整个组访问不了某些数据接口 → permit role-apis-set --revoke --datasets
|
|
53
|
-
└─ 针对某一个页面精细配置 ───→ permit page-get → page-set
|
|
54
|
-
├─ 该页对哪些角色可见 ──→ page-set --menu-roles
|
|
55
|
-
├─ 该页的增/改/删/详情/导出 → page-set --create-roles/--update-roles/...
|
|
56
|
-
└─ 行级「只看自己」 ─────→ page-set --row-roles SELF
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
### `role-menus-set` 与 `page-set --menu-roles` 的区别(易混)
|
|
60
|
-
|
|
61
|
-
两者都影响「菜单是否可见」,但入口和粒度不同,别用错:
|
|
62
|
-
|
|
63
|
-
- **`permit role-menus-set`**:以**角色**为主体,一次性设置该角色在整个 app 的菜单权限矩阵(`roleType: PAGE`),按 `resourceCode` 翻转。适合「销售组不看财务菜单」这类**按组批量**收紧。
|
|
64
|
-
- **`permit page-set --menu-roles`**:以**单个菜单页面**为主体,设置「这一页对哪些角色可见」,同时还能在同一页配置数据操作和行级权限。适合「就这一个页面的权限编排」。
|
|
65
|
-
|
|
66
|
-
判断口径:问题描述里主语是「某个组」→ 走 `role-menus-set`;主语是「某个页面」→ 走 `page-set`。
|
|
67
|
-
|
|
68
|
-
## 通用铁律
|
|
69
|
-
|
|
70
|
-
1. **先读后写**:改成员先 `role user-resolve` + `role list`;改能力先 `permit page-get` / `role-menus` 拿到真实 `resourceCode` / `menuId` / `datasetCode`,不要臆造标识。
|
|
71
|
-
2. **dry-run 必做**:所有写命令先 `--dry-run` 看 `data.before` / `data.after`,确认无误再复用同参数加 `--yes`。
|
|
72
|
-
3. **read-merge-write 是 CLI 内部行为**:`update-user-list` / `page/save` / `role/update` 服务端都是**全量回写**;CLI 已内部读取全量、只改目标片段、其余原样带回。你只需传要改的部分,但要理解一次写会覆盖整份对象。
|
|
73
|
-
4. **防漂移**:`user-add/user-remove` 可加 `--expect-user-count <n>`,当前成员数不符即中止。
|
|
74
|
-
5. **SELF 只用于行级**:`SELF` 仅允许出现在 `page-set --row-roles`(`dataPermit`);打到菜单/操作槽位会被拒绝。`ALL` 表示所有角色。
|
|
75
|
-
6. **收紧不做自动 suggest**:`role-menus-set` / `role-apis-set` 必须显式 `--menus` / `--datasets`,避免误伤;先用 `dataset list` / `menu list` 定位目标。
|
|
76
|
-
7. **运行态验证要交接**:`page-set --row-roles SELF`、`role-apis-set --revoke` 只写权限配置。要验证「登录后是否只看到自己的行 / 是否读不到财务数据」,交给 `lovrabet data filter` 在运行态确认,不要把它伪装成 `rabetbase` 已验证。
|
|
77
|
-
8. **读内层协议,不读顶层 envelope**:写命令的稳定字段在 `data.*`(`operation` / `selector` / `before` / `after` / `dryRun` / `backend` / `warnings`),不含合成 `protocol` key。
|
|
78
|
-
|
|
79
|
-
## 常见剧本
|
|
80
|
-
|
|
81
|
-
### A. 把员工加入用户组(如:把小张加入开发者)
|
|
82
|
-
|
|
83
|
-
```text
|
|
84
|
-
role user-resolve --name 小张 → 拿 userId(重名报错,用 --user <id> 消歧)
|
|
85
|
-
role list --type DEV → 拿目标角色 id
|
|
86
|
-
role user-add --role <id> --user <userId> --dry-run → --yes
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
### B. 新建一个用户组(如:创建销售组)
|
|
90
|
-
|
|
91
|
-
```text
|
|
92
|
-
role create --name 销售组 --dry-run
|
|
93
|
-
role create --name 销售组 --remark "华东销售" --yes → 从 data.selector.roleId 取回填的新 id
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
> 服务端 `role/create` 返回创建后的完整角色对象,CLI 直接将 id 填入 `data.selector.roleId`,不再按名称回查。
|
|
97
|
-
|
|
98
|
-
### C. 让某组看不到财务(菜单 + API 双侧收紧)
|
|
99
|
-
|
|
100
|
-
```text
|
|
101
|
-
dataset list → 定位财务域 datasetCode
|
|
102
|
-
menu list → 定位财务菜单 resourceCode
|
|
103
|
-
permit role-menus-set --role <salesId> --revoke --menus <财务菜单codes> --dry-run → --yes
|
|
104
|
-
permit role-apis-set --role <salesId> --revoke --datasets <财务datasetCodes> --dry-run → --yes
|
|
105
|
-
```
|
|
106
|
-
|
|
107
|
-
菜单不可见 + 数据接口不可访问,两侧都要收紧,否则可能菜单藏了但接口还能拉数据。
|
|
108
|
-
|
|
109
|
-
### D. 某个列表页只看自己的行(如:请假列表只看自己)
|
|
110
|
-
|
|
111
|
-
```text
|
|
112
|
-
menu list → 定位该页 menuId
|
|
113
|
-
permit page-get --menu-id <id> → 确认 dataPermit 槽位存在
|
|
114
|
-
permit page-set --menu-id <id> --row-roles SELF --dry-run → --yes
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
行级 `SELF` 打在 `dataPermit`,**不要** revoke 菜单本身。
|
|
118
|
-
|
|
119
|
-
## 参考
|
|
120
|
-
|
|
121
|
-
- [role list / detail / create / update / delete](../references/rabetbase-role-list.md)
|
|
122
|
-
- [role user-resolve](../references/rabetbase-role-user-resolve.md)
|
|
123
|
-
- [role user-add / user-remove](../references/rabetbase-role-user-add.md)
|
|
124
|
-
- [permit page-get / page-set](../references/rabetbase-permit-page-set.md)
|
|
125
|
-
- [permit role-menus / role-menus-set](../references/rabetbase-permit-role-menus-set.md)
|
|
126
|
-
- [permit role-apis-set](../references/rabetbase-permit-role-apis-set.md)
|
|
127
|
-
- [SKILL.md](../SKILL.md)
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
# rabetbase permit page-get / page-set
|
|
2
|
-
|
|
3
|
-
按菜单配置页面权限:菜单可见、数据操作(create/update/delete/detail/export)、行级可见(`dataPermit` = DATA_ROW)。角色字面量支持 `SELF` / `ALL` / 角色 id / 角色名(解析自 `get-permit-list`,含特殊组)。`SELF`(行级)**只允许**用于 `--row-roles`。
|
|
4
|
-
|
|
5
|
-
`page-set` 是 `high-risk-write`:服务端 `page/save` 回写完整 `IPagePermit`,CLI 读取完整快照后只改传入的槽位,其余原样回写;只能设置 `page-get` 中已存在的槽位。
|
|
6
|
-
|
|
7
|
-
## 命令
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
rabetbase permit page-get --menu-id 55 --format compress
|
|
11
|
-
rabetbase permit page-set --menu-id 55 --row-roles SELF --dry-run
|
|
12
|
-
rabetbase permit page-set --menu-id 55 --row-roles SELF --yes
|
|
13
|
-
rabetbase permit page-set --menu-id 55 --menu-roles ALL,销售组 --yes
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
## page-get
|
|
17
|
-
|
|
18
|
-
返回 `data.page`:`menuId`、`appCode`,以及 `menuPermit` / `dataCreate` / `dataUpdate` / `dataDelete` / `dataDetail` / `dataExport` / `dataPermit` 各槽的 `{ resourceCode, roles[] }`(roles 为 `{id, roleName, roleType}`)。槽位缺失表示该页面无此权限维度。
|
|
19
|
-
|
|
20
|
-
## page-set 参数
|
|
21
|
-
|
|
22
|
-
| Flag | 槽位 | 允许 SELF |
|
|
23
|
-
|------|------|-----------|
|
|
24
|
-
| `--menu-roles` | menuPermit(目录可见) | 否 |
|
|
25
|
-
| `--create-roles` | dataCreate | 否 |
|
|
26
|
-
| `--update-roles` | dataUpdate | 否 |
|
|
27
|
-
| `--delete-roles` | dataDelete | 否 |
|
|
28
|
-
| `--detail-roles` | dataDetail | 否 |
|
|
29
|
-
| `--export-roles` | dataExport | 否 |
|
|
30
|
-
| `--row-roles` | dataPermit(行级可见) | 是(SELF = 只看自己) |
|
|
31
|
-
|
|
32
|
-
每个值是逗号分隔的角色字面量。至少传一个槽位 flag。传入不存在的槽位会报错。
|
|
33
|
-
|
|
34
|
-
## 用例 5(请假列表只看自己)
|
|
35
|
-
|
|
36
|
-
行级 `SELF` 打在 `dataPermit`,**不要** revoke 菜单:
|
|
37
|
-
|
|
38
|
-
```bash
|
|
39
|
-
rabetbase menu list # 定位请假列表 menuId
|
|
40
|
-
rabetbase permit page-get --menu-id <id> --format compress
|
|
41
|
-
rabetbase permit page-set --menu-id <id> --row-roles SELF --dry-run
|
|
42
|
-
rabetbase permit page-set --menu-id <id> --row-roles SELF --yes
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## 输出协议
|
|
46
|
-
|
|
47
|
-
```json
|
|
48
|
-
{
|
|
49
|
-
"operation": "page-set",
|
|
50
|
-
"selector": { "appCode": "app-xxx", "menuId": 55, "slots": ["dataPermit"] },
|
|
51
|
-
"before": { "dataPermit": { "resourceCode": "ROW_1", "roles": [{ "id": -1, "roleName": "ALL", "roleType": "ALL" }] } },
|
|
52
|
-
"after": { "dataPermit": { "resourceCode": "ROW_1", "roles": [{ "id": 0, "roleName": "SELF", "roleType": "SELF" }] } },
|
|
53
|
-
"dryRun": true,
|
|
54
|
-
"backend": { "method": "POST", "path": "/smartapi/permit/page/save" },
|
|
55
|
-
"warnings": []
|
|
56
|
-
}
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
不含合成 `protocol`。校验读 `data.after.<slot>.roles`。
|
|
60
|
-
|
|
61
|
-
## 运行态验证交接
|
|
62
|
-
|
|
63
|
-
`page-set --row-roles SELF` 只写入权限配置。要验证「登录后 filter 是否只返回自己的行」,交给 `lovrabet data filter` 在运行态执行验证。
|
|
64
|
-
|
|
65
|
-
## 参考
|
|
66
|
-
|
|
67
|
-
- [permit role-menus-set / role-apis-set](rabetbase-permit-role-menus-set.md)
|
|
68
|
-
- [menu list](rabetbase-menu-list.md)
|
|
69
|
-
- [SKILL.md](../SKILL.md)
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# rabetbase permit role-apis-set
|
|
2
|
-
|
|
3
|
-
按 `datasetCode` 收回角色的**数据集 API** 访问(`roleType: API`)。`high-risk-write`。一期以 `--revoke` 为主满足用例 4(销售组不能访问财务数据接口)。
|
|
4
|
-
|
|
5
|
-
`datasetCode → resourceCode` 映射与当前全量 API 权限状态来自内部读取的 `get-api-list`(服务端标 `@Deprecated`,CLI 内部读、不做公开命令)。CLI 读取全量后只把指定 datasets 的 resourceCodes 置为 `0`,其余保持当前动作后全量回写。
|
|
6
|
-
|
|
7
|
-
## 命令
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
rabetbase permit role-apis-set --role 销售组 --revoke --datasets ds_finance --dry-run
|
|
11
|
-
rabetbase permit role-apis-set --role 销售组 --revoke --datasets ds_finance,ds_invoice --yes
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## 参数
|
|
15
|
-
|
|
16
|
-
| Flag | 必填 | 说明 |
|
|
17
|
-
|------|------|------|
|
|
18
|
-
| `--role <id\|name>` | 是 | 目标角色(DEV/ADMIN 拒绝) |
|
|
19
|
-
| `--revoke` | 是 | 一期语义固定为收回;缺失会报 validation |
|
|
20
|
-
| `--datasets <code,...>` | 是 | 逗号分隔 datasetCode;该角色 API 资源里不存在的 code 报错 |
|
|
21
|
-
| `--appcode <code>` | 否 | 覆盖当前 app |
|
|
22
|
-
|
|
23
|
-
## 输出协议
|
|
24
|
-
|
|
25
|
-
```json
|
|
26
|
-
{
|
|
27
|
-
"operation": "api-revoke",
|
|
28
|
-
"selector": { "appCode": "app-xxx", "roleId": 12, "roleName": "销售组", "datasetCodes": ["ds_finance"] },
|
|
29
|
-
"before": [{ "resourceCode": "API_FIN_1", "datasetCode": "ds_finance", "action": "access" }],
|
|
30
|
-
"after": [{ "resourceCode": "API_FIN_1", "datasetCode": "ds_finance", "action": "0" }],
|
|
31
|
-
"dryRun": true,
|
|
32
|
-
"backend": { "method": "POST", "path": "/smartapi/permit/role/update", "roleType": "API" },
|
|
33
|
-
"warnings": []
|
|
34
|
-
}
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
不含合成 `protocol`。校验读 `data.after`(应全部为 `action: "0"`)。
|
|
38
|
-
|
|
39
|
-
## 用例 4(完整:菜单 + API 双侧收紧)
|
|
40
|
-
|
|
41
|
-
```bash
|
|
42
|
-
rabetbase dataset list # 定位财务域 datasetCode
|
|
43
|
-
rabetbase permit role-menus-set --role <salesId> --revoke --menus <财务菜单> --dry-run|--yes
|
|
44
|
-
rabetbase permit role-apis-set --role <salesId> --revoke --datasets <财务datasetCode> --dry-run|--yes
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
菜单不可见 + 数据接口不可访问,两侧都要收紧。真实「登录后是否读不到财务行」用 `lovrabet` 运行态验证。
|
|
48
|
-
|
|
49
|
-
## 参考
|
|
50
|
-
|
|
51
|
-
- [permit role-menus / role-menus-set](rabetbase-permit-role-menus-set.md)
|
|
52
|
-
- [dataset list](rabetbase-dataset-list.md)
|
|
53
|
-
- [SKILL.md](../SKILL.md)
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
# rabetbase permit role-menus / role-menus-set
|
|
2
|
-
|
|
3
|
-
查看与设置某角色的**菜单**权限矩阵(`roleType: PAGE`)。`role-menus-set` 是 `high-risk-write`:CLI 读取角色全量菜单资源,只翻转 `--menus` 指定的 `resourceCode`,其余保持当前动作后全量回写 `permits`。
|
|
4
|
-
|
|
5
|
-
**内置角色守卫**:DEV / ADMIN 的权限矩阵不可改,会被 validation 拒绝。
|
|
6
|
-
|
|
7
|
-
## 命令
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
rabetbase permit role-menus --role 销售组 --format compress
|
|
11
|
-
rabetbase permit role-menus-set --role 销售组 --revoke --menus MENU_FIN_1,MENU_FIN_2 --dry-run
|
|
12
|
-
rabetbase permit role-menus-set --role 销售组 --grant --menus MENU_SALES_1 --yes
|
|
13
|
-
```
|
|
14
|
-
|
|
15
|
-
## role-menus(读)
|
|
16
|
-
|
|
17
|
-
返回 `data.menus[]`:`resourceCode`、`resourceName`、`allowed`(是否 `access`)、`action`。用它拿到可用的 `resourceCode` 再去 set。
|
|
18
|
-
|
|
19
|
-
## role-menus-set 参数
|
|
20
|
-
|
|
21
|
-
| Flag | 必填 | 说明 |
|
|
22
|
-
|------|------|------|
|
|
23
|
-
| `--role <id\|name>` | 是 | 目标角色(DEV/ADMIN 拒绝) |
|
|
24
|
-
| `--grant` / `--revoke` | 是(二选一) | 授予(`access`)或收回(`0`) |
|
|
25
|
-
| `--menus <code,...>` | 是 | 逗号分隔的菜单 `resourceCode`;未知 code 报错 |
|
|
26
|
-
| `--appcode <code>` | 否 | 覆盖当前 app |
|
|
27
|
-
|
|
28
|
-
## 输出协议
|
|
29
|
-
|
|
30
|
-
```json
|
|
31
|
-
{
|
|
32
|
-
"operation": "menu-revoke",
|
|
33
|
-
"selector": { "appCode": "app-xxx", "roleId": 12, "roleName": "销售组", "resourceCodes": ["MENU_FIN_1"] },
|
|
34
|
-
"before": [{ "resourceCode": "MENU_FIN_1", "action": "access" }],
|
|
35
|
-
"after": [{ "resourceCode": "MENU_FIN_1", "action": "0" }],
|
|
36
|
-
"dryRun": true,
|
|
37
|
-
"backend": { "method": "POST", "path": "/smartapi/permit/role/update", "roleType": "PAGE" },
|
|
38
|
-
"warnings": []
|
|
39
|
-
}
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## 用例 4(菜单侧:销售组不看财务菜单)
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
rabetbase dataset list # 定位财务域
|
|
46
|
-
rabetbase permit role-menus --role <salesId>
|
|
47
|
-
rabetbase permit role-menus-set --role <salesId> --revoke --menus <财务菜单resourceCodes> --dry-run
|
|
48
|
-
rabetbase permit role-menus-set --role <salesId> --revoke --menus <...> --yes
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
一期不做自动 suggest,必须显式 `--menus`,避免误伤非财务菜单。API 侧收紧见 [`role-apis-set`](rabetbase-permit-role-apis-set.md)。
|
|
52
|
-
|
|
53
|
-
## 参考
|
|
54
|
-
|
|
55
|
-
- [permit role-apis-set](rabetbase-permit-role-apis-set.md)
|
|
56
|
-
- [permit page-get / page-set](rabetbase-permit-page-set.md)
|
|
57
|
-
- [SKILL.md](../SKILL.md)
|