我希望能够为一些现有用户提供访问视图所需的自定义权限.
我想我需要新的权限添加到Postgres的表auth_permission,但我怀疑有一个更高层次的方式来做到这一点.auth_permission中还有一个用于content_type的列,我不知道它的值应该是什么.
这样做的正确方法是什么?
在django中默认情况下,当安装了django.contrib.auth运行syncdb时,它会为每个模型创建默认权限...如foo.can_change,foo.can_delete和foo.can_add.要向模型添加自定义权限,可以在模型下添加类Meta:并在那里定义权限,如此处所述https://docs.djangoproject.com/en/dev/topics/auth/#custom-permissions
我的问题是,如果我想为User模型添加自定义权限,该怎么办?喜欢foo.can_view.我可以使用以下代码段执行此操作,
ct = ContentType.objects.get(app_label='auth', model='user')
perm = Permission.objects.create(codename='can_view', name='Can View Users',
content_type=ct)
perm.save()
Run Code Online (Sandbox Code Playgroud)
但是我想要一些与syncdb很好地结合的东西,例如我自定义模型下的Meta类.我应该在MetaTlass类中使用这些,因为这是扩展用户模型的方法.但这是正确的方法吗?它不会与UserProfile模型联系起来吗?
有没有办法在django中进行行级权限?我以为没有,只是在文档中注意到了这一点:
权限不仅可以针对每种类型的对象进行设置,还可以针对特定对象实例进行设置.通过使用ModelAdmin类提供的has_add_permission(),has_change_permission()和has_delete_permission()方法,可以为同一类型的不同对象实例自定义权限.
https://docs.djangoproject.com/en/dev/topics/auth/
但我没有看到任何关于如何实际实现每个实例权限的文档
在Django 1.8项目中,当有以下代码时,我的迁移工作正常:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import migrations
from django.conf import settings
def update_site_forward(apps, schema_editor):
"""Add group osmaxx."""
Group = apps.get_model("auth", "Group")
Group.objects.create(name=settings.OSMAXX_FRONTEND_USER_GROUP)
def update_site_backward(apps, schema_editor):
"""Revert add group osmaxx."""
Group = apps.get_model("auth", "Group")
Group.objects.get(name=settings.OSMAXX_FRONTEND_USER_GROUP).delete()
class Migration(migrations.Migration):
dependencies = [
('auth', '0001_initial'),
]
operations = [
migrations.RunPython(update_site_forward, update_site_backward),
]
Run Code Online (Sandbox Code Playgroud)
此组是在迁移中创建的,因为它应在Web应用程序的所有安装中可用.为了使它更有用,我还想给它一个默认权限,所以我改为update_site_forward:
def update_site_forward(apps, schema_editor):
"""Add group osmaxx."""
Group = apps.get_model("auth", "Group")
Permission = apps.get_model("auth", "Permission")
ContentType = apps.get_model("contenttypes", "ContentType")
ExtractionOrder …Run Code Online (Sandbox Code Playgroud) 我想在手动编写的迁移中添加一些组并为其分配权限,但如果我在干净的DB上运行它,则只有在运行所有迁移后才会创建权限.
我找到了这张票:https: //code.djangoproject.com/ticket/23422但我不能在那里发表评论(我可能会在表达对GeoDjango文档的不满之后被禁止),所以我将分享对解决方案的改进在下面.
我有一个模型class Project,对于每个模型实例,应该有一个可以编辑该实例的"组"用户.我想我可以添加另一个名为ProjectEditor的模型类来添加这些编辑器.有没有更好的方法来实现这个?检查权限怎么样?我也需要写自己的权限方法,对吧?
谢谢Eric
我正在寻找实现用户权限的最佳方法,以允许用户编辑特定的模型实例.
例如,我有两个模型:
model RadioChannel(models.Model):
name = models.CharField(max_length=150, unique= True)
number = models.IntegerField( unique= True)
model ProgramSchedule(models.Model):
channel = models.ForeignKey("RadioChannel")
name = models.CharField(max_length=150, unique= True)
start_time = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)
现在我的运营商是我的内置Django用户.我想为这些用户创建组,以便他们只能添加/删除/编辑允许的ProgramSchedules.另外,我想将这些用户的组添加到管理面板.
谢谢.
我已经为我的模型添加了权限,我想在管理员中创建一个使用此权限的组.
问题是新权限未列在权限列表中.
我需要做些什么才能将它添加到该列表中?
class Meta:
permissions = (
("add_remove_job", "Can add/remove jobs"),
)
Run Code Online (Sandbox Code Playgroud)
解决方案:这是South的已知限制,解决方案是执行syncdb --all
默认行为似乎是新用户没有权限而没有组.但是,我不想手动授予每个新用户基本权限,我认为他们不想等我这样做.
我应该如何为新用户分配默认权限?
已经提出了一些类似的问题,但对一般情况没有明确的答案:
我正在使用python-social-auth所以我没有自己的创建用户表单和视图,我想其他人都设置了默认权限.我假设我需要某种类型的on-user-create挂钩,但不确定最干净的方法是什么.
这与创建可能授予用户的默认可能权限无关,但作为参考,
我想以编程方式在django中创建组,但不是在视图中创建组,而是在模型中创建组(例如使用迁移).怎么做?谷歌和文档中没有关于它的信息(至少不在这里:https://docs.djangoproject.com/en/1.7/topics/auth/default/#groups)