You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于AWS Amplify Gen 2(Angular)的DynamoDB表权限配置:如何实现访客只读、登录用户按组分配更高权限

基于AWS Amplify Gen 2(Angular)的DynamoDB表权限配置:如何实现访客只读、登录用户按组分配更高权限

嗨,我来帮你搞定Amplify Gen2 Angular里的这个权限配置问题!你要的是访客只读、登录用户按组拿更高权限的混合策略,Amplify其实完全能通过自定义授权规则实现,我给你一步步拆解得明明白白:

一、先在数据模型里配置分层授权规则

直接在你的Amplify schema文件里,给DynamoDB对应的业务模型添加授权规则,同时覆盖访客和不同用户组的权限:

import { type ClientSchema, a, defineData } from '@aws-amplify/backend';

const schema = a.schema({
  // 这里以Post模型为例,你可以换成自己的业务模型
  Post: a
    .model({
      title: a.string().required(),
      content: a.string().required()
    })
    .authorization([
      // 给未认证的访客配置只读权限,只能看数据
      a.allow.guest().to(['read']),
      // 给editors组的登录用户配置增、查、改权限
      a.allow.group('editors').to(['create', 'read', 'update']),
      // 给admins组的用户配置全权限,增删改查都能做
      a.allow.group('admins').to(['create', 'read', 'update', 'delete'])
    ])
});

export type Schema = ClientSchema<typeof schema>;
export const data = defineData({ 
  schema, 
  // 配置默认授权模式为身份池,这样能同时支持未认证和认证用户
  authorizationModes: { defaultAuthorizationMode: 'identityPool' } 
});

这段代码的逻辑很直白:访客没登录的时候只能读数据,editors组的登录用户能新建、查看和修改数据,admins组的用户则拥有完全的操作权限。

二、提前搞定基础配置

有两个基础配置要先做好:

  • 确保你的Amplify项目开启了身份池的未认证用户支持,上面代码里的defaultAuthorizationMode: 'identityPool'已经帮你搞定了核心部分,它会自动关联Cognito用户池和身份池
  • 提前在Cognito用户池里建好对应的用户组(比如editors、admins),并且把用户分配到对应的组里——只有用户属于某个组,Amplify才会给它应用该组的权限规则

三、Angular端不用额外折腾

在Angular项目里,你不需要写复杂的权限判断逻辑,Amplify会自动处理:

  • 用户没登录时,Amplify用未认证身份发请求,这时候只能调用读取类的API,要是想新建、修改或者删除数据,直接会被拒绝
  • 用户登录后,Amplify会自动带上用户的身份信息和所属组,后端的授权规则会自动验证,允许该组对应的操作

四、进阶:更细粒度的权限控制

如果你的业务需要更精准的权限(比如editors组用户只能修改自己创建的数据),可以结合owner字段和组规则,示例代码如下:

Post: a
  .model({
    title: a.string().required(),
    content: a.string().required(),
    // 添加owner字段,用来关联数据的创建者ID
    owner: a.string()
  })
  .authorization([
    a.allow.guest().to(['read']),
    // editors组用户可以新建、查看数据
    a.allow.group('editors').to(['create', 'read']),
    // editors组用户只能修改自己创建的数据
    a.allow.group('editors').to(['update']).where((model) => model.owner.eq(a.authenticatedUser().id())),
    // admins组拥有全权限
    a.allow.group('admins').to(['create', 'read', 'update', 'delete'])
  ])
  // 自动把owner字段设为当前认证用户的ID,不用手动写
  .autoPopulate('owner', (context) => context.authenticatedUser?.id)

这样配置后,editors组的用户只能修改自己创建的内容,admins组还是能操作所有数据,访客依旧只读,完全能满足复杂的权限需求。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.08 13:34:33