`
zjxplq
  • 浏览: 40534 次
  • 性别: Icon_minigender_1
  • 来自: 绍兴
社区版块
存档分类
最新评论

通过继承实现admin中记录级的权限控制

阅读更多

 

为了实现记录级的权限控制,在必须在每一个model中都要增加一个创建者(的字段,才有可能实

 

现记录级的权限控制。但一一给每个model类增加创建者字段,还是比较费事的。现在通过model

 

继承的方法来解决此问题。

models.py:

 

from django.db import models
from django.contrib.auth.models import User

# Create your models here.
class Author(models.Model):
    author = models.ForeignKey(User)
    
    
    class Meta:
        abstract = True
        
class A(Author):
    a = models.CharField(max_length=5)
    
    def __unicode__(self):
        return "%s:%s" % (self.author,self.a)
    
class B(Author):
    b= models.CharField(max_length=5)
    
    def __unicode__(self):
        return "%s:%s" % (self.author,self.b)
 

将Author model设为abstract,则可以使用得不必生成author数据表。model A与model B继承自

 

Author,所以model A与model B都有字段author.

为了实现权限控制,最重要的内容是在admin.py中:

 

from app.models import *

class AuthorAdmin(admin.ModelAdmin):
    model = Author
    
    def get_model_class(self):
        raise NotImplementedError 
    
    def queryset(self,request):
	model_class = self.get_model_class()
        if request.user.is_superuser:
            return model_class.objects.all()
        return model_class.objects.filter(author=request.user)

    
class AAdmin(AuthorAdmin):
    def get_model_class(self):
        return A
    
class BAdmin(AuthorAdmin):
    def get_model_class(self):
        return B

admin.site.register(A,AAdmin)
admin.site.register(B,BAdmin)
 

因为Author model是abstract的,没有生成相应的表,也没有objects,所以queryset

 

(self,request)中不能通过Author.objects来获取相应的函数。如何在父类中获取子类名称,是

 

一个难题。现在是能过建立一个get_model_class()函数来解决,子类继承AuthorAdmin后,必须

 

重载get_model_class(),以返回正确的model类。

AuthorAdmin类实现了权限控制,所有继承于它的类都有了权限控制了。

0
1
分享到:
评论

相关推荐

    ThinkPHP6.0整合Hui-Admin后台模板 Auth菜单权限

    通过以上步骤,你就可以在 `ThinkPHP6.0` 中成功整合 `Hui-Admin` 后台模板,并实现基于 `Auth` 的菜单权限控制。这不仅提高了后台的安全性,还使得管理界面更加有序,提升了用户体验。在实际项目中,你可能还需要...

    使用django-guardian实现django-admin的行级权限控制的方法

    标题所提到的知识点是关于在Django框架中使用django-guardian扩展包来实现对django-admin管理后台的行级权限控制。在Django中,默认的权限系统提供了基于模型的权限控制,即可以控制哪些用户或用户组能够进行哪些...

    OA权限控制

    在SSH框架中,我们可以在Action类中通过注解或配置文件定义权限控制,如`@Secured("ROLE_ADMIN")`表示只有拥有管理员角色的用户才能访问该方法。 5. **动态权限控制**:权限控制应具备灵活性,允许在运行时动态调整...

    开发企业级权限管理系统

    在企业级应用中,权限管理是一个至关重要的环节,它涉及到数据安全、用户访问控制以及组织架构的合理划分。本文将详细探讨如何使用Java技术来开发一个高效、灵活且安全的企业级权限管理系统。 首先,理解权限管理的...

    httpmodule实现权限管理

    通过这种方式,我们能够实现全局的权限控制,无论用户尝试访问哪个页面,都会先经过我们的权限检查。此外,由于HTTP模块的灵活性,我们可以根据需求扩展其功能,比如集成更复杂的授权策略,或者与其他系统(如数据库...

    django admin添加数据自动记录user到表中的实现方法

    总结一下,要在Django Admin中实现数据添加时自动记录用户信息,主要步骤如下: 1. 在模型`models.py`中定义一个字段(如`user`)来存储用户信息。 2. 在`admin.py`中创建一个自定义的`ModelAdmin`类,并注册你的...

    CDH 6.3.1 ranger ranger-2.1.0-admin.tar.gz

    总结来说,CDH 6.3.1中的Ranger 2.1.0-admin是实现大数据平台安全策略的核心工具,它提供了强大的权限管理、审计跟踪以及与多种服务的集成能力。对于任何希望确保数据安全的企业,理解和掌握Ranger的使用是至关重要...

    基于AOP的大赛信息管理系统权限设计

    4. **用户权限组中间表 (admin_privilegegroup)**:记录用户与权限组的多对多关系,以此实现权限的分配。 此外,还设计了一个名为`Privilege`的权限类,利用Java 5.0的注解特性,标记需要进行权限过滤的方法,并...

    C#winform权限问题

    在C# WinForm应用开发中,权限管理是一个关键部分,涉及到用户访问控制和安全策略的实施。本篇文章将深入探讨C# WinForm中如何处理权限问题,包括登录权限的实现和功能权限的详细讲解。 首先,让我们理解登录权限。...

    Laravel开发-laravel-admin

    5. **权限控制**:集成 Laravel 的 Gate 和 Policy 机制,实现角色和权限的分配,便于实现细粒度的访问控制。 6. **自定义扩展**:允许开发者创建自定义控制器、模型、视图和中间件,满足特定业务需求。 **三、...

    Laravel开发-laravel-admin-api

    - **授权与认证**: 支持 JWT(JSON Web Tokens)或 Laravel 的内置 Gate 和 Policy 机制,实现用户身份验证和权限控制。 - **API 响应格式化**: 可配置的响应格式,如 JSON,便于前端处理。 - **错误处理**: 统一的...

    权限管理论文\基于XML与数据库技术的权限管理

    通过这种方式,系统可以在运行时根据用户的请求动态加载XML文件中的权限信息,并从数据库中获取具体用户的权限设置,从而实现对用户请求的有效控制。 #### 实际应用案例 本文还提到了一个具体的实例,即在现有系统...

    Laravel开发-adminpanel

    4. **Blade模板引擎**:Blade是Laravel内置的轻量级模板引擎,它支持条件语句、循环、包含、继承等,使视图的创建更加简单。 5. **Artisan命令行工具**:Artisan提供了许多内置命令,如迁移(migrations)、生成...

    Laravel开发-laractive-admin .zip

    在 Laractive Admin 中,中间件可能被用来实现登录验证和权限控制。 6. **表单验证**:Laravel 提供了内置的表单验证机制,可以在控制器中定义验证规则,轻松处理客户端和服务器端的验证。 7. **Blade 模板引擎**...

    权限设计与数据库

    在简单的应用场景下,可以通过判断用户是否登录来实现基本的权限控制。例如,在PHP中可以使用以下代码片段: ```php if ($isLogin === true) { // 执行某些操作 } else { // 不执行任何操作 } ``` 这里 `$...

    PHP基于Laravel 和 Dcat Admin 的送水后台管理系统源码.zip

    2. 管理员权限控制:Dcat Admin支持多级菜单和角色权限分配,可以通过简单的配置实现对后台资源的精细控制。 3. CRUD操作:通过Dcat Admin的Grid和Form组件,可以快速创建数据展示、编辑、删除等功能,极大地减少了...

    Windows8系统文件夹权限设置.docx

    ### Windows 8系统文件夹权限设置详解 #### 一、前言 在Windows 8操作系统中,文件夹和文件的权限管理是确保数据安全的重要...通过以上步骤,您可以有效地管理Windows 8中的文件夹权限,从而更好地保护您的数据安全。

    tp5+x-admin.zip

    2. 权限控制:通过RBAC(Role-Based Access Control)角色权限控制机制,实现了用户角色与权限的灵活配置。 3. 数据管理:提供数据的导入导出、备份恢复功能,确保数据的安全和便捷管理。 4. 日志记录:系统会记录...

    Laravel开发-laravel-create-admin

    对于更复杂的权限控制,可以考虑使用 Laravel 的包如 `spatie/laravel-permission` 来实现角色和权限管理。安装后,你可以为管理员分配角色,每个角色具有不同的权限。 ```bash composer require spatie/laravel-...

    10 oracle管理权限和角色 PPT

    10. 权限继承(Privilege Inheritance):用户通过角色获得的权限可以在他们创建的对象上使用,即使这些权限没有直接授予他们。 11. PUBLIC角色:Oracle中的PUBLIC角色对所有用户开放,向PUBLIC授予的权限将对所有...

Global site tag (gtag.js) - Google Analytics