我的模式中有
type SomeEntity
和字段 isPrivate
。
它受到 @auth
指令的保护,允许所有人进行 create
操作,并且仅对所有者进行 read
操作:
@auth(
rules: [
{ allow: groups, groups: ["user"], operations: [create] }
{ allow: owner, operations: [read] }
]
)
现在我正在考虑如何允许
read
操作给所有人 if isPrivate == true
并允许每个人操作 if isPrivate == false
。
是否可以仅使用架构,或者我需要为此定制 Lambda 解析器?
您不能直接使用字段的值 (isPrivate) 仅在架构内有条件地应用授权规则。 @auth指令在类型和字段级别运行,但不支持基于字段值的动态规则。
为了实现这个目标
这允许您读取请求中的 isPrivate 字段,检查 用户的所有权或组成员身份,并允许或拒绝访问 相应地。
将 SomeEntity 拆分为具有单独规则的字段,例如 privateField for 所有人的所有者和公共领域。
示例:
type SomeEntity
@model
@auth(
rules: [
{ allow: groups, groups: ["user"], operations: [create] }
{ allow: owner, operations: [read] }
]
) {
....
.....
privateField: String @auth(rules: [{ allow: owner }])
publicField: String
}