一、背景
在Dify 的设计中,知识库在管理端是有权限的,但是在用户调用接口的时候是没有权限控制的,作为LLMOps确实也不需要控制知识库的权限,因为上层还有应用服务可以控制,但应用层控制也略显麻烦,所以我们也可以尝试自己在Dify中来实现怎么实现对知识库的访问控制。
二、方案
2.1 按照角色进行权限分配
在这个案例中用户只有一种角色,一种角色只能访问一个知识库,在接口中传入对应的角色名称就可以进行过滤。
在这个方案中我采用了条件判断的方式,进行依次对比,同时我们可以使用迭代的方式进行轮训。效果都是一样的
步骤:
- 输入角色
- 输入问题
流程展示:
2.2 按照多个角色进行权限分配
在这个方案中,用户可能包含多个角色,例如一名员工可以同时是HR和开发者,也可以同时是产品经理。
在这个方案中,我采用了并发与条件节点帮我完成,我们也可以使用数组结合迭代来进行流程设计。
步骤:
- 输入多个角色名称
- 进行回答
流程展示:
2.3 按照用户名进行权限分配
在这个场景下,我采用用户名的方式,每一个流程前设置一个判断用户名的节点,只有符合用户名的节点才能将流程进行下下去
步骤:
- 输入你的用户名
- 进行提问
- 获得答案
流程图:
2.4 按照外部接口进行权限分配
有时候我们可以依赖一个外部接口或者一个算法进行用户权限的验证,在这里我们可以采用调用第三方接口的方式,也可以采用代码执行器的方式。
步骤
- 输入用户名
- 进行提问
- 调用认真接口
- 获得答案
2.5 按照口令进行权限分配
我们使用过类似百度网盘的提取码,我们可以直接分配一个提取码,只要用户提供符合的口令,就可以获得相应的权限
步骤
- 输入口令
- 口令校验
- 获得知识库
- 答案生成
错误口令状态
口令正确
流程图
三、结束语
Dify丰富的条件语句为我们提供了非常方便进行权限控制的能力。我们只需要拖动下流程,就能完成我们基础的权限控制需求。