SurrealDB自引用关系权限限制失效:RELATE语句未被拦截
问题解答
你的判断是对的——RELATE操作并不触发关系表的CREATE权限规则,这就是自环RELATE能成功执行的原因。
在SurrealDB中,针对关系表的操作分为两种独立的事件类型:
CREATE:对应直接用CREATE edge:...语句创建关系的操作RELATE:对应专门的RELATE语句创建关系的操作
你之前定义的权限规则只针对create事件,自然不会拦截RELATE语句。
修正后的代码
把权限规则中的FOR create改为FOR relate,就能拦截自环的RELATE操作:
DEFINE TABLE node SCHEMAFULL TYPE NORMAL; DEFINE TABLE edge SCHEMAFULL TYPE RELATION IN node TO node PERMISSIONS FOR relate WHERE in != out; CREATE node:foo; RELATE node:foo->edge->node:foo; -- 此操作现在会被禁止
额外说明
如果需要同时限制两种创建关系的方式(直接CREATE和RELATE),可以同时定义两种事件的权限规则:
DEFINE TABLE edge SCHEMAFULL TYPE RELATION IN node TO node PERMISSIONS FOR create WHERE in != out, FOR relate WHERE in != out;
内容的提问来源于stack exchange,提问作者Athan Clark
相关产品推荐
相关产品推荐

