我有自己的自定义用户模型,也有自己的Manger.
楷模:
class MyUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(max_length=255, unique=True)
first_name = models.CharField(max_length=35)
last_name = models.CharField(max_length=35)
username = models.CharField(max_length=70, unique=True)
date_of_birth = models.DateField()
is_active = models.BooleanField(default=True)
is_admin = models.BooleanField(default=False)
@property
def is_staff(self):
return self.is_admin
def get_full_name(self):
return ('%s %s') % (self.first_name, self.last_name)
def get_short_name(self):
return self.username
objects = MyUserManager()
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = ['first_name', 'last_name', 'username', 'date_of_birth']
Run Code Online (Sandbox Code Playgroud)
经理:
class MyUserManager(BaseUserManager):
def create_user(self, email, first_name, last_name, username, date_of_birth, password=None, **kwargs):
if not email:
raise ValueError('User must have an email address')
user …Run Code Online (Sandbox Code Playgroud) 我在用户模型的rest API中有以下函数.我想仅在POST请求上设置AllowAny权限.有人可以帮我吗.
class UserList(APIView):
"""Get and post users data."""
def get(self, request, format=None):
"""Get users."""
users = User.objects.all()
serialized_users = UserSerializer(users, many=True)
return Response(serialized_users.data)
def post(self, request, format=None):
"""Post users."""
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
Run Code Online (Sandbox Code Playgroud) 目前我正在寻找在Django中实现访问控制.我已经阅读了有关内置权限的内容,但它没有考虑每个对象的基础.例如,我想要"只有创建者才能删除自己的项目"这样的权限.所以我读到了django-guardian.然后,在考虑之后,可能难以管理并检查约束是否会发生变化.
我看一下名为django-rules的下一个流行的权限管理应用程序.这似乎符合我的要求.但是,我相信django-rules需要涉及一个模型实例(因此对象级别),即如果我需要像"member's area"这样的简单视图,它就不会执行此功能.
这使我考虑使用后者场景的contrib权限和前者的django规则.我的问题是,管理这两个权限框架有多容易?例如,我有不同的用户组.我担心重叠的情况,管理员在管理系统中添加了一个特定的权限(允许访问视图),认为这应该足够,但结果是由规则设置的约束限制.
我相信这是一个常见的案例,我谦虚地根据您的经验寻求您的建议和建议.
我过去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的名称字段生成唯一的字符串.但是嗯....对于多个自定义组有更好的解决方案吗?也许有人有个主意?先感谢您!
今天我想出了一个要求,我需要实现字段级权限,以寻找最佳方式.
class ABC(models.Model):
field1 = .....
field2 = .....
field3 = .....
Run Code Online (Sandbox Code Playgroud)
创建两个组(A和B)并分配权限,两者都可以添加/编辑/删除,另一个只能添加/编辑.但现在需要一些帮助: -
我想如果第一个组用户登录管理员他应该能够看到所有三个字段,但如果第二个组用户登录他们应该只看到field1.
我想在django admin中这个,因为我需要在这些之后执行一些操作.我的django版本是1.3
提前致谢
我有一个EuropartsBuyer名为的组和模型Product.
以下代码向Product模型添加权限.
class Meta:
permissions = (
("can_add_cost_price", "Can add cost price"),
)
Run Code Online (Sandbox Code Playgroud)
在我的一个视图中,我有以下代码将此权限添加到该组.
europarts_buyer, created = Group.objects.get_or_create(name='EuropartsBuyer')
add_cost_price = Permission.objects.get(codename='can_add_cost_price')
europarts_buyer.permissions.add(add_cost_price)
Run Code Online (Sandbox Code Playgroud)
在Django Admin的帮助下,我已经向该组添加了一个用户EuropartsBuyer.
当我在另一个视图中使用以下代码时
if request.user.has_perm('can_add_cost_price'):
do something
Run Code Online (Sandbox Code Playgroud)
结果应该是,True但它显示False.因此,if子句下的代码不会运行.
我已经在Django shell中导入了当前登录的用户,当我再次测试权限时,它显示为False.
我在这做错了什么?
我找不到我的问题的解决方案,并希望对此发表评论/帮助。
我想在 Django 中开发一个多用户类型模型,沿着作者使用 Django Proxy Models的这个视频的路线。
我有一个 XX 项目的列表(proj01, proj02, projXX, ...)。所有这些项目都有其特定的页面,可以通过特定的 url 访问mysite/projXX/
我有多个用户:Adam、Bob、Caroline、Dany、Ed、...
每个用户可以根据他们所从事的项目拥有多个角色(例如经理、开发人员、纪录片制作人、审阅者、编辑等)
用户可以根据项目具有不同的角色。例如,Adam 可以是 proj01 的审稿人,但可以是 proj02 的编辑,而 Bob 可以是 proj01 的编辑,但可以是 proj02 的审稿人,等等。
我开始在models.py下面的文件中定义多个用户类型(只有审阅者和编辑者角色):
# accounts/models.py
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.urls import reverse
from django.utils.translation import gettext_lazy as _
class User(AbstractUser):
class Types(models.TextChoices):
EDITOR= "EDITOR", "Editor"
REVIEWER = "REVIEWER", "Reviewer"
base_type = Types.EDITOR
type = models.CharField(
_("Type"), max_length=50, …Run Code Online (Sandbox Code Playgroud) 在我的Django应用程序中,我有一些用户需要的权限才能访问某些视图(使用django.contrib.auth).这@permission_required在我的视图函数上使用装饰器工作正常.
但是,我的一些URL会解析为我没有编写的视图,例如内置的视图,django.contrib.auth.views.password_change如下所示urls.py:
urlpatterns = patterns(
(r'^$', "users.views.index"),
(r'^password_change/$', 'django.contrib.auth.views.password_change'))
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我无处可以应用我的@permission_required装饰 - 或者我?有没有办法在URL调度程序级别应用权限限制?
情况非常简单:我正在编写一个多用户博客系统.系统应阻止非所有者编辑或删除博客帖子.在我看来,我使用通用视图.
class BlogUpdateView(UpdateView):...
我知道我应该使用@method_decorator来装饰调度方法.但是,大多数示例只是@method_decorator(login_required)或模型级别权限.如何应用对象级权限来检查request.user是否是此博客文章的作者?例如,我尝试使用django-authority应用程序,我在此文件中有一个BlogPermission类.我尝试在这个类中定义一个方法,例如
def blog_edit(self, ??, ??)
我应该把这个方法放进去?
然后称之为:
@method_decorator(permission_required('blog_permission.blog_edit(???)'))
我应该在这里传递什么?
更新:在读取method_decorator代码后,我发现它只能接受没有参数的函数.我认为这就是为什么permission_required在这里不起作用的原因.但是关于这个的工作是什么?
更新方案:
在调度方法中,我检查用户权限,然后如果用户不符合权限则返回HttpResponseForbidden().
我在Django中为一个非常复杂的系统建模.我将在这里仅发布它的相关部分,我将展示简化的用例图表,以更好地表达我的想法.
我基本上有两种类型的用户:卖家和客户.
一个卖家 " 获得 "一个客户,是指卖方现在有客户的个人信息,并可以与他/她交互.
卖方不能与他未获得的客户互动.

一个卖家创建模型的层次结构相关的对象(在分段每个模型与外键,其父连)

一个卖家 共享创建的框对象及其所有相关对象与一些客户

授权客户可以:

问题:
django django-models django-permissions django-users django-guardian
django ×10
django-users ×3
python ×2
django-admin ×1
django-urls ×1
django-views ×1
hash ×1
permissions ×1