我在我的Codeigniter应用程序中使用了A3M。其中一项功能是确定主导航菜单中显示的项目,具体取决于登录用户的权限。
这很好用,但是我有点担心生成菜单所需的数据库调用次数 - 尤其是在每个页面上都会发生这种情况。
有没有人对如何避免这种情况有任何想法?某种类型的缓存也许。
由于
答案 0 :(得分:0)
原来很简单,所以我在这里发布解决方案,以防其他人发现它有用。
没有大量细节(除非有人问),最好的方法似乎是创建一个数据库查询来提取所有当前用户权限的数组。加入a3m_account
,a3m_rel_account_role
,a3m_rel_role_permission
和a3m_acl_permission
表格非常简单。
获得结果后,'展平'它通过将每个key_name添加到一个名为$permissions
的一维数组中。然后,您可以通过执行in_array('permission_to_check',$permissions)
这允许您使用单个数据库调用执行大量权限检查。这大大加快了我的应用程序。您甚至可以在登录时将$permissions
数组添加到会话数据中,因此权限检查会话不需要数据库调用(但显然,更改不会立即发生)。 / p>