用途:为 Phoenix/LiveView 项目提供 Ash Framework 参考。Ash 与 Phoenix/Ecto 互补,LiveView、安全与 OTP 铁律仍适用,仅数据访问模式转向 Ash 动作与领域代码接口。
主要能力与铁律:使用领域代码接口,禁止在 LiveView/Controller 中直接调用 Ash.create/Ash.read,应调用如 MyApp.Accounts.register_user();actor/scope 须在查询准备阶段设置,传给 for_read/for_create/for_action,而非 Ash.read!/Ash.create!,否则会绕过行级策略评估;若项目使用 Ash.Scope,则统一用 scope:,不要混用 actor:;优先用生成器,先运行 mix ash.gen.resource 或 mix ash.gen.domain 并加 --yes;修改资源后必须运行 mix ash.codegen 生成迁移,不要手写 AshPostgres 迁移;业务逻辑放入命名动作而非领域函数;不要编辑 priv/resource_snapshots/;Ash 项目中禁止直接使用 Repo.*。
使用方式:领域代码接口示例中,在领域内用 define 暴露动作,再在 LiveView 中调用。授权示例:MyApp.Post |> Ash.Query.for_read(:list_published, %{}, actor: current_user) |> Ash.read!()。Ash.Scope 需实现 Ash.Scope.ToOpts。生成器工作流:mix ash.gen.resource MyApp.Accounts.User --yes、mix ash.gen.domain MyApp.Accounts --yes、mix ash.codegen、mix ash.migrate。文件约定包括 changes、checks、actions、types、validations 等目录。
适用场景:Phoenix/LiveView 项目中使用 Ash 进行资源建模、授权与数据访问。限制:资料未提供收费、价格、平台与效果信息;具体版本与完整协议规范需查阅 Tidewave、usage_rules 或 hexdocs.pm。