gpt4 book ai didi

关于创建/权限升级的 Django 用户权利

转载 作者:行者123 更新时间:2023-12-02 02:15:44 60 4
gpt4 key购买 nike

我遇到了以下问题:如果我给用户 staff-status 并允许他创建用户但不创建新组和分配权利,他仍然可以为另一个用户分配“管理员”-entitlements - 所以他可以轻松添加拥有更多权利的用户比他自己!有没有人在不提供自定义用户模型/ View 的情况下找到避免这种情况的方法?

感谢您的回复。

最佳答案

Django 要求具有可以添加用户权限的用户也具有可以更改用户权限。引用 documentation :

Also note: if you want your own user account to be able to create users using the Django admin site, you'll need to give yourself permission to add users and change users (i.e., the "Add user" and "Change user" permissions). If your account has permission to add users but not to change them, you won't be able to add users. Why? Because if you have permission to add users, you have the power to create superusers, which can then, in turn, change other users. So Django requires add and change permissions as a slight security measure.

但是,可以通过修改 ModelAdmin(或其形式)来限制给定用户分配的可用权限集。这是 an answer显示如何重新定义 UserAdmin

我相信您的新 ModelAdmin 必须:a) 过滤掉比您拥有更多权限的用户(这样您就不能删除他们的权限); b) 修改更改用户表单,这样你就不能设置 superuser 字段,并且你不允许分配的权限被排除在列表之外(或者完全禁用整个列表 - 但我不知道那是您真正需要的是什么,对吗?创建一个完全没有权限的用户在 IMO 上几乎没有用)。

更新:这是我目前的发现。应该满足上述所有目标,但权限过滤问题除外(它的行为就像您在问题中提出的那样 - 拒绝向无权用户分配 any 权限)。您可以对其进行修改以更好地满足您的需求(例如,将 .is_superuser 替换为您想要允许/拒绝更改权限的任何逻辑)。

from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.models import User

class MyUserAdmin(UserAdmin):
def queryset(self,request):
qs = admin.ModelAdmin.queryset(self,request)
if request.user.is_superuser:
return qs
# Only allow viewing/editing users who are not superusers
return qs.filter(is_superuser=False)
def get_readonly_fields(self, request, obj=None):
# Deny editing groups, permissions and the superuser status
return () if request.user.is_superuser else ('is_superuser', 'groups', 'user_permissions')

admin.site.unregister(User)
admin.site.register(User, MyUserAdmin)

关于关于创建/权限升级的 Django 用户权利,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10781387/

60 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com