我有一个名为“rsUserRights”的查询,它返回如下用户权限:
UserID | Entity | Right
-----------------------
1 Note Create
1 Note Edit
1 Note Delete
这意味着 UserID '1' 可以创建、编辑或删除 Note 对象。
我想做的就是将这些权限存储在一个 SESSION 数组中,以便 Web 应用程序始终知道登录用户拥有什么权限。因此,当用户在我的应用程序中查看注释对象时,创建、编辑或删除的正确选项将可用,具体取决于该用户拥有的权限。
应用程序需要知道用户有权使用什么对象,然后该权限是什么。某些用户可能没有只读权限。如何将此 Entity-Right 键值对存储在 ColdFusion 结构中?
到目前为止,我所做的只是:
<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 例如
这个可以吗??