使用repoze.what的替代权限模型

时间:2010-12-15 21:38:55

标签: python authentication authorization web-frameworks

我正在编写一个网络应用,我想使用repoze.what& repoze.who来处理我的授权&认证。问题是repoze.what似乎是硬编码接受某种权限模型,即:

  • 该网站的访问者是登录用户或匿名用户。
  • 用户帐户属于0个或更多组。
  • 群组拥有0或更多与之关联的权限。

因此,例如,您的权限可能是“可以发表文章后”和“可以发表评论”,您的论坛可能是“作者”,“访问者”,其中“作者”可以发布文章和文章;发表评论,而访问者只能发表评论。

该模型可能适用于大多数网站。但是,我的网站允许团队在不同级别上相互协作。所以我需要的安全模型是:

  • 访问者是登录用户或匿名用户。
  • 用户是0个或更多组的成员。
  • 对于用户所属的每个组,该成员资格将具有不同的权限。例如,用户可能是“作者”或组A,但可能是B组的“评论者”。

群组数量会随着时间的推移而变化,这些群组的成员资格也会发生变化。我看不到将此权限模型集成到repoze.what中的任何简单方法。我错过了一些明显的东西吗?

2 个答案:

答案 0 :(得分:2)

好吧,你可以很容易地拥有一个“Group_A_commenter”组和“Group_B_editor”组。它们不必手动生成。 :)你的模型实际上只是分组的问题。

但你也应该能够制作实施规则的谓词检查器。

http://what.repoze.org/docs/1.0/Manual/Predicates/index.html#term-predicate

答案 1 :(得分:0)

我有一个答案,经过一番摆弄。

答案是使用repoze.what文档中建议的身份验证模式的唯一原因是,如果这样做,您可以免费使用他们的谓词。幸运的是,写作&使用自己的谓词是件小事。在我看来,唯一的硬性要求是用户对象(虽然显然你可以随意调用它)。在我的应用程序中,我有一堆自定义谓词可以检查某些内容,例如:

  • 用户是该群组的成员吗? (由参数指定的组)
  • 用户是否已登录?
  • 用户是否拥有此特定网站角色?

然后,我可以随时随地使用这些谓词。