0

正如标题所说,我需要在其中创建一个动态menu stored树,并且计划在其上放置一个接口。现在我需要根据市场上适合此要求的产品 database来决定如何实现。Access Control Layer

我在我的项目中大量使用Spring IoCspring mvc等等hibernate。我以前用过apache shiro,还不错。只是社区还很年轻,所以关于 shiro 的问题需要时间才能有贡献,而且没有大量的文档。

无论如何,我仍在计划使用shiro,因为我有我没有的经验spring security。现在第一个问题应该是,将 ACL 绑定到菜单系统|导航系统是个好主意。如果有人可以,我会很高兴分享他的经验。

所以在我的脑海中usersroles我想到了这个模型,,,,,,rightsusers_rightsroles_usersroles_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 

唯一的问题是我如何处理子菜单?自我多对多权利?最后,一切都变得如此复杂。所以我想有其他的观点、见解和建议。谢谢

4

1 回答 1

1

我希望我明白你想要什么。
我认为使用自外键是有效的。
但是,我建议您在创建子菜单或更新其中一个父菜单时计算子菜单的“ACL 值”,
因此在 ACL 检查子菜单期间您不会花时间计算它。
如果我没有正确使用这些术语,我很抱歉
,一般我的意思是,如果你在一棵树上有一些值,并且这个值可能取决于树中父节点的值,
你应该考虑在插入、更新或对祖先之一进行任何更改期间计算子节点/叶子的值。

于 2012-09-15T17:00:44.280 回答