如何根据用户层次结构授予查看页面的权限

时间:2011-07-07 20:32:31

标签: database django hierarchy

我正在为面向企业解决方案的django应用程序的用户工作。目前,用户能够将网站上的数据分类为私人收藏,仅对他们自己可见。功能请求是管理员能够查看其下属的私有集合。

我的问题是,实施此层次结构的最佳解决方案是什么?我想到了一些解决方案:

  • 从用户到用户名为manager的外键。创建一个@user_passes_test测试,该测试通过查看集合所有者的管理器关系进行递归,直到a)发现请求用户是管理员,或b)manager为Null,表示请求用户无权访问此页面。
    • 好处:使用最少的数据准确表示简单的层次结构
    • 缺点:大型层次结构会产生许多查询
  • 在称为管理员的用户和用户之间创建多对多关系。在此表中创建所有关系。
    • 好处:只需要一个查询,用户可以拥有多个管理员。
    • 缺点:当有人离开时很难改变层次结构。

我也对人们有任何其他建议持开放态度。

1 个答案:

答案 0 :(得分:1)

统一数据树(其中节点和叶子所引用的数据属于同一类)通常可以通过基于SQL的树结构轻松维护。虽然您总是可以手写,但Django MPTTTreebeard都处理了这个问题。我使用过Treebeard,但MPTT似乎更受欢迎。