正如标题所说,我需要创建一个动态menu stored
作为 database
中的一棵树并且计划在其上放置一个接口(interface)。现在我需要决定如何实现 Access Control Layer
基于市场上适合此要求的产品。
我大量使用Spring IoC
, spring mvc
等等....与hibernate
对于我的项目。我用过apache shiro
以前,这还不错。只是社区还很年轻,所以关于 shiro 的问题需要时间才能做出贡献,而且没有广泛的文档。
我仍然计划使用 shiro
无论如何,因为我有过 spring security
没有的经验现在第一个问题应该是将 ACL 与菜单系统|导航系统联系起来是个好主意。如果有人可以分享他在这方面的经验,我将很高兴。
所以我脑海中浮现出这个模型 users
, roles
, rights
, users_rights
, roles_users
, roles_rights
users //contains creds and user detail
roles //contains roles
rights // contains rights (including menu entries matching rights, if i have to tie them)
roles_users //many-to-many roles-users with extra columns mapped as entity
roles_rights // many-to-many roles-rights with extra columns mapped as entity
users_rights //many-to-many users-rights mapped as entity with extra columns. special rights for user and overwrite the overall rights given by roles. can deny rights given by a role or add rights not inside any roles
所以在权利表中我可以这样:
id
name // in the form of admin:users:list
description
menu_name // unique name what shows on page
menu_url
唯一的问题是我如何处理子菜单? self 多对多权利? 最后一切都变得如此复杂。所以我想要有其他的观点、见解、建议。谢谢
最佳答案
我希望我明白你想要什么。
我认为使用自外键是有效的。
但是,我建议您在创建子菜单时或在更新其中一个父菜单时计算子菜单的“ACL 值”,
因此,在子菜单的 ACL 检查期间,您无需花费时间进行计算。
如果我没有正确使用这些术语,我很抱歉,
一般来说,我的意思是,如果您在一棵树上有一些值,并且该值可能取决于树中父节点的值,
您应该考虑在插入、更新或祖先之一的任何更改期间计算子节点/叶子的值。
关于java - 如何将 Java 安全层(Apache Shiro|Spring Security)集成到 webapp 菜单系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12439170/