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

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

阅读更多

http://zjxplq.iteye.com/admin/blogs/925711

在具体的使用继承来实现admin来实现的记录级的权限控制中又遇到问题了,在使用admin.TabularInline时,就会发现它的save_model()不会调用。

解决方法如下:

 

from django.contrib import admin
from app.models import *

class AuthorMixin(object):
    exclude = ('author',)
    
    def get_model_class(self):
        raise NotImplementedError 
    
    def queryset(self,request):
        if request.user.is_superuser:
            return self.get_model_class().objects.all()
        return self.get_model_class().objects.filter(author=request.user)
    
    def has_change_permission(self,request,obj=None):
        has_class_permission = super(AuthorMixin, self).has_change_permission(request, obj)
        if not has_class_permission:
            return False
        if obj is not None and not request.user.is_superuser and request.user.id != obj.author.id:
            return False
        return True
    
    def save_model(self,request,obj,form,change):
        if not change:
            obj.author = request.user
        obj.save()
        print type(obj)
        
    def save_formset(self, request,form,formset,change):
        instances = formset.save(commit=False)
        
        for instance in instances:
            instance.author = request.user
            instance.save()
    
class BAdminInline(AuthorMixin,admin.TabularInline):
    model = B
    
    def get_model_class(self):
        return B
    
class AAdmin(AuthorMixin,admin.ModelAdmin):
    inlines = [BAdminInline,]
    
    def get_model_class(self):
        return A
    
class BAdmin(AuthorMixin,admin.ModelAdmin):
    def get_model_class(self):
        return B
 
admin.site.register(A,AAdmin)
admin.site.register(B,BAdmin)

 这样的话不管是在ModelAdmin,还是在TabularInline使用都正常实现功能

0
0
分享到:
评论

相关推荐

    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中实现这一功能。 首先,我们需要在`models.py`文件中定义我们的数据模型。在这个例子中,我们有一个名为`Setting`的模型,其中...

    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文件中的权限信息,并从数据库中获取具体用户的权限设置,从而实现对用户请求的有效控制。 #### 实际应用案例 本文还提到了一个具体的实例,即在现有系统...

    tp5+x-admin.zip

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

    Laravel开发-adminpanel

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

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

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

    Laravel开发-laractive-admin .zip

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

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

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

    权限设计与数据库

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

    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