Token导航 LogoToken导航TokenDH.com
开发只读github未标认证来源可访问许可证需确认审计通过

constructive-safegres建设性的安全格雷斯

Agent Skill

constructive-safegres 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

360

周安装

15

GitHub Stars

公开资料未说明

下载量

120
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:constructive-safegres(建设性的安全格雷斯)
来源仓库:https://github.com/constructive-io/constructive-skills
仓库路径:skills/constructive-safegres
安装命令:
npx skills add https://github.com/constructive-io/constructive-skills --skill constructive-safegres
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/constructive-io/constructive-skills --skill constructive-safegres

简介

Constructive 授权体系的核心协议层,定义访问控制策略与 JSON 配置。

  • 编译为 PostgreSQL RLS 等执行机制,但不直接等同于 SQL 语句。
  • 适用于自动化安全策略部署和关系型权限模型设计。
  • 需结合 constructive-security 和 constructive-relations 等配套技能使用。
  • 适用宿主包括 Codex、Claude、Cursor、Gemini CLI,接入前应确认版本、权限和运行环境要求。

SKILL.md

Safegres (Authz* Security Protocol)

Safegres is the protocol layer behind Constructive authorization.

  • Safegres is expressed as a policy type (e.g. AuthzEntityMembership) plus a JSON config (policy data).
  • The system compiles these policy nodes into enforcement mechanisms (most notably PostgreSQL RLS), but Safegres itself is not SQL.

If you are writing automation that provisions security, treat Safegres as the vocabulary of "what access means".

Related skills:

  • TypeScript SDK secure provisioning: constructive-security
  • Relation provisioning: constructive-relations
  • **Data* modules (field generators):** constructive-data-modules -- defines each Data* nodeType, what fields it creates, and which Authz* policy it pairs with

Core vocabulary (used in every Safegres policy)

Actor

The actor is the authenticated user performing the query.

  • current_user_id() (conceptually) = the actor's user id.
  • In membership resolution tables you'll see this represented as actor_id.

Entity

An entity is the scope a membership belongs to.

  • For org/group memberships: entity_id identifies the org/group.
  • For app memberships: membership is global, so there is typically no per-row entity_id binding.

Membership types (scopes)

Safegres policies commonly take membership_type:

  • 1 = App
  • 2 = Org
  • 3 = Group

This can be provided as an integer or a string name (resolved via the membership types module).

Users ARE Organizations (personal orgs)

A key identity property:

  • Every user also has an "org identity".
  • Each user automatically has an org-level membership to themselves ("personal org").

This matters because an org-level membership check against a field like owner_id can often unify:

  • "user owns it personally" and
  • "org owns it and user is a member"

...under a single AuthzEntityMembership policy.


The critical distinction: AuthzMembership vs AuthzEntityMembership

AuthzMembership (UNBOUND)

Meaning: "Is the actor a valid member of *some scope* (app/org/group), optionally with a permission/admin flag?"

  • It does not bind to any field on the row being accessed.
  • Therefore it is primarily an app-level gate.

Typical correct uses:

  • "Is this request coming from any authenticated/approved user?"
  • "Is the actor a super app admin?"
  • "Can the actor access a global administrative table that is not entity-scoped?"

Typical incorrect uses:

  • Using AuthzMembership(membership_type=2) on an entity-scoped table and expecting it to mean "member of *this row's org*".

- It does not. - It means "member of *any org*" (or, more precisely, "has at least one org membership row"), which is almost always too broad.

AuthzEntityMembership (BOUND)

Meaning: "Does the actor have membership in the specific entity referenced by *this row's field*?"

  • It binds membership evaluation to an entity_field on the protected row.
  • It is the default choice for entity-scoped resources.

Rule of thumb:

  • If your row has an entity_id, organization_id, or owner_id that should scope access: you almost always want EntityMembership, not Membership.

Safegres policy node types — Quick reference

There are 14 leaf policy node types plus AuthzComposite (a meta-node for boolean trees).

#TypeIntentKey config
1AuthzDirectOwnerDirect personal ownershipentity_field
2AuthzDirectOwnerAnyMulti-owner OR logicentity_fields (array)
3AuthzMembershipUnbound membership gatemembership_type, optional permission/is_admin
4AuthzEntityMembershipBound membership-to-rowentity_field, membership_type
5AuthzRelatedEntityMembershipEntity membership via joinentity_field, obj_schema/obj_table/obj_field
6AuthzPeerOwnershipPeer visibility (direct)owner_field, membership_type
7AuthzRelatedPeerOwnershipPeer visibility via joinentity_field, obj_schema/obj_table/obj_field
8AuthzOrgHierarchyHierarchy (manager/subordinate)direction, anchor_field, entity_field
9AuthzTemporalTime-window constraintsvalid_from_field, valid_until_field
10AuthzPublishableDraft/published gating (READ-only)is_published_field, published_at_field
11AuthzMemberListActor in UUID array (not recommended)array_field
12AuthzRelatedMemberListActor in related UUID array (not recommended)owned_schema/owned_table/owned_table_key
13AuthzAllowAllUnconditional allow (use sparingly){}
14AuthzDenyAllUnconditional deny{}

See authz-types.md for full documentation of each type including config shapes, semantics, use/avoid guidance, and code examples.


AuthzComposite (meta-node)

AuthzComposite lets you build a boolean expression tree (AND/OR/NOT) over Safegres nodes. The data is an AST node that the system recursively evaluates — either a single Authz* leaf or a BoolExpr.

When to use:

  • Genuinely nested boolean logic that cannot be expressed with separate top-level policies.
  • Mixing AND/OR at different levels (e.g., (A OR B) AND (C OR D)).
  • NOT expressions.

Prefer multiple top-level policies over AuthzComposite whenever possible. Reserve it for cases that genuinely require nested boolean trees.

See authz-types.md for BoolExpr examples.


Permissive vs Restrictive policies in RLS

When Safegres policies compile to PostgreSQL RLS:

  • Permissive (default): Multiple permissive policies are ORed — if any passes, the row is accessible.
  • Restrictive (permissive:= false): ANDed with permissive results — all restrictive policies must pass *in addition to* at least one permissive.

The pattern: (P1 OR P2 OR... Pn) AND R1 AND R2 AND... Rm.

CompositionExample
OR (permissive + permissive)Owner OR org admin can see
AND (permissive + restrictive)Org members, but only within time window
Mixed (2P + 1R)Owner OR org member, but only if published
Mixed (2P + 2R)Owner OR org member, but only if published AND within time window

When this flat shape is insufficient (e.g., (A AND B) OR (C AND D)), use AuthzComposite.

See authz-types.md for detailed composition examples.

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

37.16%
按下载量换算45

Claude

29.17%
按下载量换算35

Cursor

20.22%
按下载量换算24

Gemini CLI

8.85%
按下载量换算11

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

只读

该 Skill 主要提供规则、说明或参考内容,本身偏只读;真正读写文件、联网或执行命令仍取决于宿主 Agent 的任务。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills