标签: django-permissions

django自定义用户模型密码未被哈希处理

我有自己的自定义用户模型,也有自己的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)

django hash django-admin django-permissions django-users

10
推荐指数
2
解决办法
8013
查看次数

如何仅在特定方法上添加django rest框架权限?

我在用户模型的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-permissions django-rest-framework

10
推荐指数
1
解决办法
8221
查看次数

django - 比较django权限和使用django规则

目前我正在寻找在Django中实现访问控制.我已经阅读了有关内置权限的内容,但它没有考虑每个对象的基础.例如,我想要"只有创建者才能删除自己的项目"这样的权限.所以我读到了django-guardian.然后,在考虑之后,可能难以管理并检查约束是否会发生变化.

我看一下名为django-rules的下一个流行的权限管理应用程序.这似乎符合我的要求.但是,我相信django-rules需要涉及一个模型实例(因此对象级别),即如果我需要像"member's area"这样的简单视图,它就不会执行此功能.

这使我考虑使用后者场景的contrib权限和前者的django规则.我的问题是,管理这两个权限框架有多容易?例如,我有不同的用户组.我担心重叠的情况,管理员在管理系统中添加了一个特定的权限(允许访问视图),认为这应该足够,但结果是由规则设置的约束限制.

我相信这是一个常见的案例,我谦虚地根据您的经验寻求您的建议和建议.

django django-permissions

9
推荐指数
1
解决办法
892
查看次数

扩展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)

这扩展了现有的集团.在namepermissions现场来自直接从集团模式.如果我创建一个新团队,也会添加一个团队.那很棒.

使用自定义save方法,我还可以添加,user列出的members,将添加到创建的组中,并获得授予团队/组的权限.

现在我的问题是,该name字段是唯一的 - 所以我无法为每个项目添加Admins -Team.

我考虑为前端添加另一个名称字段,并为Group-Model的名称字段生成唯一的字符串.但是嗯....对于多个自定义组有更好的解决方案吗?也许有人有个主意?先感谢您!

django django-models django-permissions

9
推荐指数
1
解决办法
4519
查看次数

字段级权限Django

今天我想出了一个要求,我需要实现字段级权限,以寻找最佳方式.

class ABC(models.Model):
    field1 = .....
    field2 = .....
    field3 = .....
Run Code Online (Sandbox Code Playgroud)

创建两个组(A和B)并分配权限,两者都可以添加/编辑/删除,另一个只能添加/编辑.但现在需要一些帮助: -

我想如果第一个组用户登录管理员他应该能够看到所有三个字段,但如果第二个组用户登录他们应该只看到field1.

我想在django admin中这个,因为我需要在这些之后执行一些操作.我的django版本是1.3

提前致谢

python django django-permissions

9
推荐指数
1
解决办法
3758
查看次数

如何从Django中的组检查当前用户的权限?

我有一个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 permissions django-permissions django-users

9
推荐指数
1
解决办法
1万
查看次数

如何实现Django多用户类型,而一个用户可以根据他/她所从事的项目具有不同的角色?

我找不到我的问题的解决方案,并希望对此发表评论/帮助。

我想在 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)

python django django-models django-permissions

9
推荐指数
1
解决办法
225
查看次数

Django:在URL调度程序中应用权限?

在我的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调度程序级别应用权限限制?

django django-urls django-permissions

8
推荐指数
2
解决办法
8983
查看次数

将对象级别权限添加到通用视图

情况非常简单:我正在编写一个多用户博客系统.系统应阻止非所有者编辑或删除博客帖子.在我看来,我使用通用视图.

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-views django-permissions

8
推荐指数
1
解决办法
3603
查看次数

在Django中与其他用户共享对象

我在Django中为一个非常复杂的系统建模.我将在这里仅发布它的相关部分,我将展示简化的用例图表,以更好地表达我的想法.

我基本上有两种类型的用户:卖家和客户.

  1. 一个卖家 " 获得 "一个客户,是指卖方现在有客户的个人信息,并可以与他/她交互.
    卖方不能与他未获得的客户互动. 在此输入图像描述

  2. 一个卖家创建模型的层次结构相关的对象(在分段每个模型与外键,其父连)
    在此输入图像描述

  3. 一个卖家 共享创建的对象及其所有相关对象与一些客户 在此输入图像描述

  4. 授权客户可以:

    • R -ead Box模型的一些属性
    • R -ead和U -pdate Item模型的一些属性
    • 无法访问Item模型的某些属性

    在此输入图像描述

问题:

  • :创建用户之间关系的最佳方法是什么?
    我已经看到django-relationship可能很有用.
  • B:在Django中与其他用户共享 Model实例的最佳方法是什么?
    在我的情况下,默认情况下,如果未明确共享,则客户 无法访问卖方创建的任何模型.
  • C:如果我只共享Box模型,它是否隐含意味着它的所有相关模型(Box模型的外键)都将被共享?
  • D: 每个用户控制字段权限的最佳方法是什么?
    可以Django的监护人是有用的吗?

django django-models django-permissions django-users django-guardian

8
推荐指数
1
解决办法
1962
查看次数