Tho*_*rzl 9 django django-models django-permissions
我过去3天一直在搜索谷歌和Stackoverflow,但找不到类似的东西.我想扩展或使用django组和权限.
假设我们有一些项目与不同的团队和用户.
class Project(models.Model):
owner = models.ForeignKey(User)
name = models.CharField(max_length=100)
class Team(models.Model):
project = models.ForeignKey(Project)
members = models.ManyToManyField(User)
name = models.CharField(max_length=100)
permission = models.ManyToManyField(Permission)
Run Code Online (Sandbox Code Playgroud)
现在 - 一切都很好.现在我想要的是扩展django提供的现有Auth.Group,这样我就可以request.user.has_perm...直接使用了.
那么,让我们将团队模型改为
class Team(Group):
project = models.ForeignKey(Project)
members = models.ManyToManyField(User)
Run Code Online (Sandbox Code Playgroud)
这扩展了现有的集团.在name与permissions现场来自直接从集团模式.如果我创建一个新团队,也会添加一个团队.那很棒.
使用自定义save方法,我还可以添加,user列出的members,将添加到创建的组中,并获得授予团队/组的权限.
现在我的问题是,该组的name字段是唯一的 - 所以我无法为每个项目添加Admins -Team.
我考虑为前端添加另一个名称字段,并为Group-Model的名称字段生成唯一的字符串.但是嗯....对于多个自定义组有更好的解决方案吗?也许有人有个主意?先感谢您!
您需要使组名称具有唯一性。因此,您发现的一种方法是使用另一个名称字段,使其对于所有子组都是唯一的。
另一种方法是利用现有的名称字段并添加您的特殊字符。例如带有 等的组名admin#project1(members#project1注意:我不确定组名中是否允许使用“#”,您可以选择允许的任何特殊字符)。
因此,每当您创建时,您都会在模型方法中Team使用后缀更新名称字段。#<project_name>Teamsave()
为了更清晰地显示它,您可以添加__unicode__()方法以仅返回组名称的第一部分。例子:
class Team(Group):
...
def __unicode__(self):
try:
return self.name.split('#')[0]
except:
#something wrong!
return self.name
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4519 次 |
| 最近记录: |