我想添加一个组并授予它编辑薪资的权限,如何在Django中进行此操作?

2024-04-18 23:47:54 发布

您现在位置:Python中文网/ 问答频道 /正文

在哪里可以添加组和权限(即模型或视图或管理),在哪里可以更改代码?你知道吗


Tags: 代码模型视图权限
2条回答

可以为创建的每个新模型运行以下代码。你知道吗

    from django.contrib.contenttypes.models import ContentType
    from django.contrib.auth.models import Permission , Group

    def add_permission(model_class_name, app, readble_class_name):


        ctype = ContentType(name = readble_class_name, app_label=app, model=model_class_name)
        try:
            ctype.save()
        except IntegrityError:
            ctype = ContentType.objects.get(app_label=app, model=model_class_name)

        viewers = Group.objects.get(name='viewer')
        editors = Group.objects.get(name='editor')

        options = [('view', [viewers, editors]) ,('add',[editors]), ('change',[editors]), ('delete',[])]

        for opt in options: 
            perm = Permission(name = 'can %s %s' % (opt[0], readble_class_name) , content_type=ctype, codename = '%s_%s' % (opt[0], model_class_name))
            perm.save()

            for g in opt[1]: 
                g.permissions.add(perm)

然后在“用户管理”中,在“帐户”选项卡下有“组”。 创建一个新组,将您想要的权限拖动到该组。你知道吗

然后你可以通过管理员找到被请求的用户,给他一个在被请求组下的权限。你知道吗

通常,在创建数据库架构之后,您希望创建此权限。在这种情况下,可以使用每次运行syncdb命令时运行的signals.post_syncdb.connect(...)。由于权限是一项管理任务,我个人认为将它添加到admin.py更为相关,但您可以将它放在任何地方。你知道吗

def editor_group_permissions(sender, **kwargs):
    editor=Group.objects.get_or_create(name='editor')[0]


    for m in ["Article", "popular Article", "slider Article"]:
        for p in ["add","change","delete"]:
            perm=Permission.objects.get(name="Can "+p+" "+m)
            editor.permissions.add(perm)
            print perm," on ",m, "granted for editor"


    ct = ContentType.objects.get(app_label='auth', model='user')
    staff_approve_perm=Permission.objects.get_or_create(codename='can_approve_staff',
                                                        name="Can approve staff",
                                                        content_type=ct)[0]
    print staff_approve_perm," on ","staff", "granted for editor"
    editor.permissions.add(staff_approve_perm)

from django.db.models import signals
signals.post_syncdb.connect(editor_group_permissions)
signals.post_syncdb.connect(author_group_permissions)

相关问题 更多 >