我将权限数据存储在数据库中,将会话数据存储在内存/文件系统中。我将每个用户的权限处理形式存储在会话数据中。我想在数据库中更改用户权限后刷新该权限缓存。由于角色权限、用户额外权限和权限详细信息的更改,用户权限可能会发生变化。所以有很多存储过程会导致用户权限的改变。我可以收集该用户的列表,但我应该如何将其发回?(我已经使用返回值来发回记录等......)
回答“我不确定您到底在问什么:我应该如何将其寄回?请澄清并添加代码示例(即使它不起作用)。 ”
我将会话数据存储在内存或文件系统中,并将用户权限存储在数据库中。授权逻辑非常复杂,因此通过成功的身份验证,我收集用户拥有的每个权限,使用自定义解析器对其进行解析,并将结果作为缓存保存到会话中。之后,我通过权限检查使用该缓存。问题是通过权限更改、角色更改、角色权限更改、角色成员身份更改等...我必须更新会话中的权限缓存。
带有 REST 接口的简化版本:
POST /sessions {email: "", password: ""}
-> {token: "qwerty", user: {id: 123}}
-> sessionStore.create("qwerty", {user: {id: 123}, permissions: "abcd"})
POST /roles {name: "administrator", permissions: "efgh"}
-> {id: 567}
POST /roleMmembership {user: {id: 123}, role: {id: 567}}
-> {id: 890}
-> sessionStore.update("qwerty", {user: {id: 123}, permissions: "abcdefgh"})
如您所见,在我将用户 123 添加到角色 567 后,会话已更新,并且权限“efgh”已添加到会话权限缓存中。在数据库级别,新成员调用添加成员的存储过程,并返回 id。我可以在此过程中看到哪个用户有权限更改,但我无法发回该信息,因为存储过程只能有一个返回值。使用 notify 发送该信息是一个好主意,因为它应该更像一个事件而不是返回值。可悲的是,在我的数据库驱动程序中,不支持通知,我不想更改驱动程序......所以我需要一个解决方法。它可能是多个返回值、全局变量等......我认为使用临时表是唯一可能的解决方案,但我对 postgres 没有太多经验......