首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

django权限:用户只能查看和编辑"his“对象

Django 权限:用户只能查看和编辑“his”对象

基础概念

Django 是一个高级的 Python Web 框架,它鼓励快速开发和干净、实用的设计。Django 自带了一个强大的权限系统,可以用来控制用户对数据的访问。在这个系统中,你可以定义用户、组和权限,然后通过这些来控制用户对不同对象的访问。

相关优势

  1. 细粒度控制:Django 的权限系统允许你对每个模型进行详细的权限设置。
  2. 灵活性:你可以根据需要自定义权限,而不仅仅是使用预定义的权限。
  3. 集成性:权限系统与 Django 的认证系统紧密集成,使得管理用户和权限变得简单。

类型

Django 的权限主要分为以下几类:

  1. 对象级权限:控制用户对特定对象的访问。
  2. 模型级权限:控制用户对整个模型的访问。

应用场景

假设你有一个博客应用,其中每个用户都有自己的博客文章。你希望用户只能查看和编辑自己的文章,而不能访问其他用户的文章。这就是一个典型的对象级权限应用场景。

实现方法

以下是一个简单的示例,展示如何在 Django 中实现用户只能查看和编辑自己的文章。

1. 定义模型
代码语言:txt
复制
from django.db import models
from django.contrib.auth.models import User

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
2. 定义权限

Django 会自动为每个模型生成 add_<modelname>, change_<modelname>, 和 delete_<modelname> 权限。你可以根据需要自定义权限。

3. 检查权限

在视图中检查用户是否有权限访问或修改特定的对象。

代码语言:txt
复制
from django.shortcuts import get_object_or_404
from django.http import HttpResponseForbidden
from .models import Article

def edit_article(request, article_id):
    article = get_object_or_404(Article, id=article_id)
    if request.user != article.author:
        return HttpResponseForbidden("You do not have permission to edit this article.")
    # 处理编辑逻辑
4. 使用 Django 的权限系统

你也可以使用 Django 的 PermissionRequiredMixinUserPassesTestMixin 来简化权限检查。

代码语言:txt
复制
from django.contrib.auth.mixins import UserPassesTestMixin
from django.views.generic.edit import UpdateView
from .models import Article

class EditArticleView(UserPassesTestMixin, UpdateView):
    model = Article
    fields = ['title', 'content']

    def test_func(self):
        article = self.get_object()
        return self.request.user == article.author

遇到的问题及解决方法

问题:用户仍然可以访问或修改其他用户的对象。

原因:权限检查逻辑没有正确实现,或者在视图中没有进行权限检查。

解决方法

  1. 确保在视图中进行了正确的权限检查。
  2. 使用 Django 提供的权限检查工具,如 UserPassesTestMixin
  3. 确保数据库中的权限设置正确。

参考链接

通过以上步骤,你可以实现用户只能查看和编辑自己的对象的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

五表权限_表格设置查看权限编辑权限

设计基础:用户、角色、权限三大核心表,加上用户角色、角色权限两个映射表(用于给用户表联系上权限表)。这样就可以通过登录的用户来获取权限列表,或判断是否拥有某个权限。...,都是为广义的用户分配角色,角色拥有广义的权限。...角色是最重要的中枢,隐藏做幕后黑手,从不出现在业务代码里,用行话说就是解除了用户权限的直接耦合。...角色把用户抽象化了,几百个用户变成成几个角色,用户->角色->权限写成通用判断权限的方法:currUser.IsHave(xx权限)。核心就是一个sql联表查询语句,查询条件为用户id。...例如: 部门权限:部门也是一种用户,建立 部门表、部门角色表。

3.8K20
  • Django 中的用户身份验证权限管理:设计与实现指南

    在Web应用程序开发中,用户身份验证权限管理是至关重要的方面。Django作为一个功能强大且全面的Web框架,提供了许多内置的工具库,使得在应用程序中实现用户身份验证权限管理变得相对简单。...本文将探讨在Django中如何设计实现一个健壮的用户身份验证系统权限管理系统。 用户身份验证 用户身份验证是确保用户是其所声明的身份的过程。...除了用户身份验证外,Django还提供了强大的权限管理系统,使开发者能够轻松地为用户分配管理权限。...(request, article_id): # 只有具有“更改文章”权限用户可以编辑文章 pass 用户自定义权限 在某些情况下,您可能需要定义自己的自定义权限,并在应用程序中使用它们...// 前端权限控制示例 if (userHasPermission('change_article')) { // 显示编辑按钮 } 日志记录审计跟踪 在一个安全可靠的应用程序中,对用户的操作进行日志记录审计跟踪是至关重要的

    1.4K20

    小知识:如何赋予用户查看所有存储过程触发器的权限

    客户有这样一个需求,需要赋予用户test查看所有存储过程触发器的权限,但是不能够对其进行修改或删除。...当前用户test具备的权限是基本的connect, resource,其实如果对象是表的话,有点像SELECT ON TABLE_NAME的权限。...相关的权限,发现分别授予DEBUG ANY PROCEDUREADMINISTER DATABASE TRIGGER的权限可以实现查看所有存储过程触发器的权限。...grant DEBUG ANY PROCEDURE, ADMINISTER DATABASE TRIGGER to test; 使用test用户登陆,比如plsql工具,验证可以查看到其他用户的存储过程触发器...,比如jingyu用户下的: jingyu.sp_pro1 jingyu.insertT1 尝试对其进行删除、修改、重建都会报错权限不足,满足客户需求。

    1.2K20

    django自带权限机制

    Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全灵活;用好权限机制,能让系统更加强大和健壮。...以博客系统为例,博客系统的用户可分为『管理员』、『编辑』、『作者』『读者』四个用户组;博客系统管理员编辑具有查看、修改删除所有的文章的权限,作者只能修改删除自己写的文章,而读者则只有阅读权限。...管理员、编辑读者的权限,我们可以用全局权限做控制,而对于作者,全局权限无法满足需求,仅通过全局权限,要么允许作者编辑不属于自己的文章,要么让作者连自己的文章都无法修改。...仍沿用最开始的例子,如果model B有三个实例 B1,B2 B3,如果我们把B1的可写权限赋予用户A,则A可以修改B1对象,而对B2,B3无法修改。...结合Django自带权限机制object permission,博客系统中作者的权限控制迎刃而解:系统全局上不允许作者编辑文章,而对于属于作者的具体文章,赋予编辑权限即可。

    1.5K30

    Django权限机制的实现

    Django权限机制概述 权限机制能够约束用户行为,控制页面的显示内容,也能使API更加安全灵活;用好权限机制,能让系统更加强大和健壮。...以博客系统为例,博客系统的用户可分为『管理员』、『编辑』、『作者』『读者』四个用户组;博客系统管理员编辑具有查看、修改删除所有的文章的权限,作者只能修改删除自己写的文章,而读者则只有阅读权限。...管理员、编辑读者的权限,我们可以用全局权限做控制,而对于作者,全局权限无法满足需求,仅通过全局权限,要么允许作者编辑不属于自己的文章,要么让作者连自己的文章都无法修改。...仍沿用最开始的例子,如果model B有三个实例 B1,B2 B3,如果我们把B1的可写权限赋予用户A,则A可以修改B1对象,而对B2,B3无法修改。...结合Django自带权限机制object permission,博客系统中作者的权限控制迎刃而解:系统全局上不允许作者编辑文章,而对于属于作者的具体文章,赋予编辑权限即可。

    1.1K10

    Django-xadmin+rule对象权限的实现

    基于对象权限控制(如:系统用户分为平台运营人员商家用户,商家用户小A只能查看编辑所属商家记录,而管理员可以纵览全局) 3....数据库记录导入导出(xsl, json等),并且拥有对象级的权限控制(如:小A不能导出小B公司的信息,更不能导入小B公司信息进行更新和新增) 1.2 现状 实现需求1:Django-admin...功能实现 本节主要展示对象权限功能实现。django工程、xadmin替换原生admin的设置,请参照官方文档。...,商家账号只能查看编辑、导入、导出公司码一致的商家客户信息 # model.py class CompanyUser(models.Model): user = models.OneToOneField...%s' % (self.app_label, codename), obj) # 重写queryset()或者get_list_display(),list view的权限也做到了对象级隔离

    1.3K20

    Linux指令大全(文件目录操作、文件内容查看编辑、系统信息管理、网络通信、压缩和解压缩、权限管理、包管理……)

    Linux操作系统具有丰富的命令行界面,用户可以使用这些指令来管理文件目录、运行程序、配置系统设置等。...本文将总结Linux文件目录操作、文件内容查看编辑、系统信息管理、网络通信、压缩和解压缩、权限管理、包管理等常见指令。.../ 将 "file.txt" 重命名为 "newfile.txt" mv Folder NewLocation // 将 "Folder" 移动到 "NewLocation" 目录下 二、文件内容查看编辑指令...vi file.txt // 使用 vi 编辑器打开 "file.txt" 进行编辑 nano file.txt // 使用 nano 编辑器打开 "file.txt" 进行编辑 三、系统信息管理指令...sudo command // 以超级用户权限执行指定的命令 四、网络通信指令 ping:测试网络连接 ping www.example.com // 向目标主机发送 ICMP 请求以测试网络连接

    49810

    Django-xadmin+rule对象权限的实现方式

    基于对象权限控制(如:系统用户分为平台运营人员商家用户,商家用户小A只能查看编辑所属商家记录,而管理员可以纵览全局) 3....数据库记录导入导出(xsl, json等),并且拥有对象级的权限控制(如:小A不能导出小B公司的信息,更不能导入小B公司信息进行更新和新增) 1.2 现状 实现需求1:Django-admin让我们能够很方便的实现一个管理后台程序...功能实现 本节主要展示对象权限功能实现。django工程、xadmin替换原生admin的设置,请参照官方文档。...,商家账号只能查看编辑、导入、导出公司码一致的商家客户信息 # model.py class CompanyUser(models.Model): user = models.OneToOneField...补充知识:django 扩展自带权限,使其支持对象权限 扩展django 自带权限 说明 在不重写 自带权限的基础上,完成支持对象权限,适用于小型项目。

    95920

    108-Django开发在线书店

    管理员:管理员拥有更高权限,可以登录后台管理系统,对用户进行管理,如创建、编辑、删除用户账户,设置用户权限等。匿名用户:未注册用户也可以浏览书籍详情,但无法进行购买等需要登录的操作。...权限管理系统为不同的用户角色分配了不同的权限,确保用户只能访问操作其被授权的页面功能。管理员可以在后台为普通用户设置特定的权限,如限制某些书籍的购买权限等。...书籍管理管理员可以在后台添加、编辑、删除书籍信息,包括书名、作者、出版社、价格、库存量、书籍简介、封面图片等。系统支持书籍分类管理,管理员可以创建、编辑、删除书籍分类,方便用户浏览搜索书籍。...后端技术:基于Django框架,利用Python语言开发后端逻辑,实现用户管理、权限管理、书籍管理、订单管理等功能。...总结本项目通过Django框架构建了一个功能完备的在线书店系统,不仅为用户提供了便捷的购书体验,同时也为管理员提供了强大的后台管理功能。系统的安全性、易用性可维护性都得到了充分考虑保障。

    12100

    Django管理应用程序的高级配置在BookInstance模型的运用【Django

    Django管理应用程序 Django管理应用程序可以使用的模型自动构建可用于创建、查看、更新和删除记录的站点区域。这可以在开发过程中节省大量时间,使测试模型查看是否有正确的数据变得容易。...Django项目只建议用于内部数据管理(也就是说,仅适用于组织的管理员或内部人员),因为以模型为中心的方法不一定是所有用户的最佳界面,并且暴露了许多关于模型的不必要的细节。...为了查看创建记录,我们还需要用户拥有所有对象的记录。可以创建一个“超级用户”帐户,该帐户具有对网站的完全访问权限使用manage.py所需的所有权限 调用下一个命令。...在同一目录中,manage-Py创建一个超级用户。系统将提示输入用户名、电子邮件地址强密码。...详细信息视图 选择要显示(或排除)的字段、它们的顺序、分组、可编辑、要使用的小部件、方向等。 向记录中添加相关字段以允许内联编辑(例如,在创建作者记录时添加添加编辑书本记录的功能)。

    1.7K20

    103-Django开发投票选举系统

    Django 投票选举系统是一个基于 Python 3.11 Django 框架的全功能投票应用程序。该系统提供了丰富的功能用户友好的界面,以满足投票选举的各种需求。...提供搜索功能,允许用户根据投票名称、发布日期投票人数进行过滤。分页功能确保用户能够轻松浏览大量投票。投票用户可以查看每个投票的详细信息,包括问题选项。...用户可以为自己选择的选项投票,但每个用户只能为每个投票投一次票。如果投票已结束,用户将无法再投票。投票内容管理问卷所有者可以发布新的投票,包括设置问题、添加选项设置投票结束时间。...提供图形化展示功能,让用户更直观地了解投票结果。用户管理管理员可以管理所有用户账户,包括查看编辑删除用户信息。管理员可以为用户分配不同的权限级别,控制用户对投票的访问操作权限。...权限分配不同的用户角色(如普通用户、问卷所有者、管理员)具有不同的权限权限系统确保只有具有相应权限用户才能执行特定操作。扩展性系统具备良好的扩展性,可以根据实际需求添加新的功能模块。

    15310

    Django默认权限机制及使用

    Blog,是不能控制用户只能删除自己创建的blog的 如果希望用户只能删除自己创建的Blog,不能删除别人创建的Blog,这种需求Django默认的权限管理就无法实现了,需要用到object permission...对象权限,有第三方模块实现了对象权限,如django-guardian 2、 每个Model模型默认只有四个权限,分别是添加add_、修改change_、删除delete_、查看view_,这些权限记录在...,关于Django的信号Signals介绍使用可以查看这篇文章:Django使用Signals监测model字段变化发送通知, 3、自定义权限 默认的权限名字描述都是英文的,且只有四个,如果你不想用默认的几个权限...Y37用户分配任何权限,他也会有对Blog表的修改权限 5、权限查看 get_all_permissions()列出用户的所有权限: >>> User.objects.get(username='...用户对象可以通过has_perm方法来判断用户是否拥有某个权限: >>> User.objects.get(username='ops-coffee').has_perm('blog.change_blog

    1.4K30

    【SQL 审核查询平台】Archery使用介绍

    专栏持续更新中:MySQL详解 界面截图 功能清单 依赖清单 框架 Django Bootstrap jQuery 前端组件 菜单栏 metisMenu 主题 sb-admin-2 编辑器 ace...资源组:实例都需要关联资源组,才能被关联资源组的用户访问 实例标签:通过支持上线、支持查询的标签来控制实例是否在SQL上线/查询中显示,要使用上线查询的实例需要关联标签 添加资源组 资源组是一堆资源对象的集合...,与用户关联后用来隔离资源访问权限,一般可以按照项目组划分 资源组关联用户/实例 用户必须关联资源组才能访问资源组内的实例资源 - 关联对象管理可以批量关联实例用户 - 在添加用户实例的时候也可以批量关联资源组...- 仅[sql|permission]开头的权限是控制业务操作的权限,其他都是控制Django管理后台的权限,与业务无关,可不分配 用户关联权限组/权限 用户所拥有的权限=用户所在权限组的权限+给用户单独分配的权限...可在系统配置中进行修改,详见 配置项说明 设置默认资源组默认权限组,新用户第一次登录时会自动关联,可避免用户登录后出现403(未授权)的问题

    84310

    Django Admin后台管理:高效开发与实践

    创建新记录:点击模型名称,进入编辑页面,填写字段后点击保存创建新记录。 查看编辑删除记录:点击列表中的记录,可以查看详细信息并进行编辑或删除操作。...认证后端:Django允许定义多个认证后端,用于验证用户凭据。 权限授权:Django权限系统基于对象,允许为每个对象实例设置权限。...用户模型:Django提供了一个默认的用户模型,包含用户名、密码电子邮件等字段。 3.2 用户、组权限的管理 用户管理:在Django Admin中,可以创建、编辑删除用户。...组管理:组是用户的集合,可以为组分配权限,从而简化权限管理。 权限管理:权限分为两种,即对象权限模型权限。模型权限适用于整个模型,而对象权限适用于模型的特定实例。...3.4 高级权限控制 对象权限Django允许为模型的每个实例设置权限,这可以通过编写自定义权限类来实现。

    16910

    Django源码学习-23-Permission

    from django.contrib.auth.models import Permission 权限管理,一般指根据系统设置的安全规则或者安全策略,用户可以访问而且只能访问自己被授权的资源。...User对象 位于'django.contrib.auth.models'模块中有两个多对多的属性分别是groupsuser_permissions。...Django 权限机制 Django 权限机制能够 约束用户行为,控制页面的显示内容 ,也能使 API 更加安全灵活;用好权限机制,能让系统更加强大和健壮 Django 用 user, group ...Django 用 permission 对象存储权限项,每个model默认都有三个permission,即 add model, change model delete model。...u1.user_permissions.add(p) # 给用户添加多条权限u1.user_permissions.add(p,p2,p3) # 查看用户的所有权限u1.get_all_permissions

    65630

    django写接口(实战篇)

    接口分页效果 我们可以看到接口返回的信息还包含了前一页后一页的 url 是不是很人性化 接口数据多条件筛选 目前我们的接口要查找特定的信息只能通过 id 来查找,这肯定是不够完善的,这部分将设置接口的多条件查询...filtering http://www.django-rest-framework.org/api-guide/filtering/#example rest_framework 权限设置 到目前为止我们写的接口不设置任何权限上的设置...然后我们发现就可以进行操作了,但是目前这个权限有个缺点,就是不是 post 下的 author 登陆后也可以对 post 进行操作修改,我们重新通过继承 BasePermission 重写一个权限类,限制只能由...rest_framework 身份认证 当我们设置权限的时候,我们不可能每个接口都去设置用户登录,所以就涉及用户身份验证,Android App 常用的身份验证是 Token 验证,所以这部分主要讲 TokenAuthentication...例如之前我们做删除等编辑操作都需要用户进行登录 http -a[username]:[password] DELETE http://192.168.x.xxx:8080/api/post/10/ 获得

    2.1K20

    35.Django2.0文档

    第七章 用户用户权限 因为你是用超级用户登录的,你可以创建,编辑删除任何对像。 然而,不同的环境要求有不同的权限,系统不允许所有人都是超级用户。...管理工具有一个用户权限系统,通过它你可以根据用户的需要来指定他们的权限,从而达到部分访问系统的目的。 你通过管理界面编辑用户及其许可就像你编辑别的对象一样。...浏览用户用户组区域的时候已经见过这些了。 如你所想,用户对象有标准的用户名、密码、邮箱地址真实姓名,同时它还有关于使用管理界面的权限定义。...普通的活跃,非超级用户的管理用户可以根据一套设定好的许可进入。 管理界面中每种可编辑对象(如:books、authors、publishers)都有三种权限:创建许可,编辑许可删除许可。...后面这种基于对象级别的权限设置比较复杂,并且超出了本书的覆盖范围。 注释: 权限管理系统也控制编辑用户权限。 如果你给某人编辑用户权限,他可以编辑自己的权限,这种能力可能不是你希望的。

    11.3K100

    使用 Django 的 admin 定制后台,丰富自己网站的后台管理系统

    ModelAdmin 的详细参数 查看源码 为了更好的了解 Django 的管理类有哪些基本属性,我们可以去 Django 的源码中查找这个类的源代码,看一下它有哪些默认的属性方法。...,默认是100 filter_horizontal = ('tags', 'keywords') # 给多选增加一个左右添加的框 # 限制用户权限只能看到自己编辑的文章...然后就可以把这个函数当做一个字段添加到 list_display 中展示到后台了,展示的效果如图: 重写函数 除了可以重新定义默认的属性,还可以重写管理类的函数,这个很好理解,如下代码我重新定义了一下用户查看权限...: # 限制用户权限只能看到自己编辑的文章 def get_queryset(self, request): qs = super(ArticleAdmin, self).get_queryset...如果要实现真正意义上的定制有别于 Django 自带的后台管理系统,xadmin 应该是最值得推荐的,它单独实现了一个后台管理,具体的介绍使用方法可以自行查看 Github 的项目介绍,地址:https

    3.1K10
    领券