1

不涉及太多细节,这是一个高层次的问题。

我一直认为将主键存储在没有约束的地方从来都不是一个好主意。例如,在 EAV 风格架构中存储主键("USER_ID",144)。如果该用户被删除,它将不会反映在 EAV 映射中,并会导致更远的问题。

所以我正在创建一个使用 shiro 作为security/permission框架的新应用程序,我需要用户能够编辑自己而不是其他用户,我还需要其他用户能够编辑任何人。很简单:

user1 = "user:441:edit"

user2 = "user:edit"

另外,我可以有一个只能编辑一部分用户的人,像这样

user3 = "user:459:edit","user:460:edit","user:461:edit"

或者,可以编辑某个部门但仅限该部门的用户的人

user4 = "department:5898:user:edit"

如果 user3 列表中的某个人被删除,那么没有魔法就无法更新该用户的权限(遍历所有权限并找到要删除的权限)。

现在我不打算重置密钥,但如果它真的发生并且我不清理旧密钥,我可能会让用户突然能够编辑在重用旧密钥后最近创建的用户。

我可以通过使用在所有表中唯一的生成代码("user:ciS84nFSHK:edit")来管理权限删除来缓解其中的一些问题。但是,添加几亿条记录让我认为这可能会很快变得笨拙。

我是否不正确地使用 Shiro?我只是过度关注键被破坏了吗?这些问题你解决了吗?任何帮助,将不胜感激。

4

1 回答 1

0

在对 Shrio 进行了更多研究之后,我决定采用 pst 的建议并简单地通过 GUID 引用这些值(可能是 10 位字母数字而不是保留空间)。

因此 user1 = "user:441:edit" 将变为 "user:96aae854-fc40-42ff-b948-c8944c2fca92:edit" 这将有助于消除将键存储为字符串的担忧。

于 2011-05-23T20:03:38.797 回答