gpt4 book ai didi

coldfusion - 每个 SESSION 如何存储许多数据项?

转载 作者:行者123 更新时间:2023-12-04 00:54:38 25 4
gpt4 key购买 nike

我有一个名为“rsUserRights”的查询,它返回这样的用户权限:

UserID | Entity | Right
-----------------------
1 Note Create
1 Note Edit
1 Note Delete
这意味着 UserID '1' 可以创建、编辑或删除 Note 对象。
我要做的就是将这些权限存储在 SESSION 数组中,以便 Web 应用程序始终知道登录用户拥有哪些权限。因此,当用户在我的应用程序中查看 Note 对象时,创建、编辑或删除的正确选项将可用,具体取决于该用户拥有的权限。
应用程序需要知道用户有权访问什么对象,然后该权限是什么。有些用户可能没有只读权限。如何在 ColdFusion 结构中存储这个 Entity-Right 键值对?
到目前为止,我所能做的就是:
<cfset SESSION.Auth.UserRights = StructNew()>
<cfloop query="rsUserRights">
<cfset SESSION.Auth.UserRights.#rsUserRights.Entity#>
<cfset SESSION.Auth.UserRights.#rsUserRights.Entity#.#rsUserRights.Right#>
</cfloop>
以上能用吗?然后使用 structkeyexits 来查找值对?我可以看到的问题是,我最终可能会减少 SESSION 变量的负载,因为用户可能对数百个实体/对象拥有数百个权限。因此,它会创建数百个 SESSION 变量并使我的服务器崩溃?

第一次尝试解决方案
<cfset SESSION.Auth.UserRights = StructNew()>
<cfloop query="rsUserRights">
<cfset SESSION.Auth.UserRights[rsUserRights.Entity][rsUserRights.Right] = StructNew()>
</cfloop>
然后在我的 CFM 页面中,我测试是否存在 SESSION.Auth.UserRights.Note 和 SESSION.UserRights.Note.Create 例如
这个可以吗??

最佳答案

那绝对行得通。我个人会创建一个结构,其中包含默认为 false 的权限,然后在登录时将匹配的权限更新为 true。

原因是您可以只检查 perms 而不必检查是否存在等。请注意,您应该执行 cflock,但我将在此示例中省略它。

<cfset SESSION.Auth.UserRights = {}>
<cfloop index="AuthRight" list="Note,User,Documents,Application,SomethingElse">
<cfset SESSION.Auth.UserRights[AuthRight]={Create=false,Edit=false,Delete=false}>
</cfloop>

<cfloop query="rsUserRights">
<cfset SESSION.Auth.UserRights[rsUserRights.Entity][rsUserRights.Right]=true>
</cfloop>

关于coldfusion - 每个 SESSION 如何存储许多数据项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19821508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com