django自带的权限管理Permission用法说明
Django 是一个流行的 Python web 开发框架,它提供了强大的权限管理系统,使得开发者可以方便地控制用户对特定资源的访问权限。在 Django 中,权限管理主要依赖于 `Permission` 模型,该模型存储在 `auth_permission` 表中。本文将深入探讨 Django 自带的权限管理机制以及如何使用 `Permission`。 ### 默认权限 Django 针对每个定义的模型(Model)会自动创建四个默认的权限: 1. `add`: 允许用户创建新的模型实例。 2. `change`: 允许用户编辑已存在的模型实例。 3. `delete`: 允许用户删除模型实例。 4. `view`: 允许用户查看模型实例。 例如,如果你有一个名为 `Log` 的模型,那么对应的 `auth_permission` 表会有如下记录: | id | name | content_type_id | codename | |----|-----------------------|-----------------|-----------------| | 1 | Can add log | 7 | add_log | | 2 | Can change log | 7 | change_log | | 3 | Can delete log | 7 | delete_log | | 4 | Can view log | 7 | view_log | 这里的 `content_type_id` 对应的是 `django_content_type` 表中的 id,它标识了这个权限是针对哪个模型的。`codename` 字段则用于程序中进行权限检查,比如 `add_log` 代表了添加日志的权限。 ### `django_content_type` 表 `django_content_type` 表用于存储所有应用中定义的模型信息,包括所属的应用名 (`app_label`) 和模型名 (`model`)。这样,Django 就能根据模型在不同应用中的位置来区分不同权限。 ### 验证权限 验证用户是否拥有特定权限通常有两种方式: 1. **在函数中验证**:通过 `user.has_perm()` 方法,传入一个包含应用名和权限名的字符串,如 `user.has_perm('test.add_book')`,这将返回一个布尔值,表示用户是否拥有添加书籍的权限。 2. **装饰器验证**:使用 `@permission_required` 装饰器,如 `@permission_required('test.add_book', login_url='/login', raise_exception=True)`。这会在函数执行前检查用户权限,权限不足时可选择重定向或抛出异常。 ### 模板中验证权限 在模板中验证权限,Django 提供了一个自定义标签的方式。你需要在应用的 `templatetags` 目录下创建一个 `my_tags.py` 文件,并定义一个过滤器 `has_permission`。然后在模板中使用这个过滤器,如 `{% if user|has_permission:"test.add_book" %}`,这将判断用户是否有添加书籍的权限。 ### 注意事项 虽然 Django 的默认权限管理针对模型级别,但若需要针对单个数据实例进行权限控制,通常需要结合其他策略,如模型继承、自定义中间件或使用第三方库如 `django-guardian`。 ### 扩展使用 除了默认的四种权限,你还可以自定义权限。在模型类中使用 `Meta` 类的 `permissions` 属性,即可定义额外的权限。例如: ```python class MyModel(models.Model): # ... fields ... class Meta: permissions = ( ("custom_permission", "描述自定义权限"), ) ``` 这样,Django 将自动在数据库中创建相应的 `Permission` 记录,你可以通过 `user.has_perm('app_name.custom_permission')` 进行权限检查。 ### 总结 Django 的权限管理是其安全体系的重要组成部分,通过 `Permission` 模型,我们可以轻松控制用户对模型操作的权限。结合 `has_perm` 方法、装饰器和模板过滤器,可以在各个层面实现权限控制。对于更复杂的需求,Django 还提供了灵活的扩展机制,使得开发者能够构建出符合业务需求的安全系统。

























- 粉丝: 12
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 网络教学模式省名师优质课赛课获奖课件市赛课百校联赛优质课一等奖课件.pptx
- 电子商务概论-李琪版的ppt课件.ppt
- 基于SVM的乳腺癌图像识别,使用DDSM公开数据集
- 教育软件代理协议书.docx
- 基于单片机的自动避障小车设计与实现.doc
- 软件工程基础习题集.docx
- 云桌面虚拟化解决方案.docx
- 招聘成功的人才微软招聘过程及经验(最终).pptx
- 综合布线毕业设计论文.doc
- 网络营销--如何让你的网店人尽皆知.pptx
- 2019金融数据科技信息区块链PPT模板.pptx
- SQLServer数据库系统设计与实现指导书.doc
- 鄂教版七上语文大自然语言图文.pptx
- 2022年C语言知识点总结正式版.doc
- 干货分享区块链核心技术之共识机制样本.docx
- 通信公司企业文化诊断报告终稿.pptx


