zoukankan      html  css  js  c++  java
  • django 1.5+ 权限设计浅析

    权限关系图

    依赖app:

       django.contrib.auth

       django.contrib.contenttype

    admin后台的权限控制解析

    (path/to/django.contrib.admin/sites.py 394-449 -- django 1.6.5版本)

    先判断是否有模块权限,然后再判断是否有模型权限,有则添加相应的按钮(add/modify);

    has_module_perms = user.has_module_perms(app_label)
            app_dict = {}
            for model, model_admin in self._registry.items():
                if app_label == model._meta.app_label:
                    if has_module_perms:
                        perms = model_admin.get_model_perms(request)
    
                        # Check whether user has any perm for this module.
                        # If so, add the module to the model_list.
                        if True in perms.values():
                            info = (app_label, model._meta.model_name)
                            model_dict = {
                                'name': capfirst(model._meta.verbose_name_plural),
                                'object_name': model._meta.object_name,
                                'perms': perms,
                            }
                            if perms.get('change', False):
                            ...
    

      

    至于删除,则是在相应的删除视图里面(path/to/django.contrib.admin/options.py 1456 ~ 1461行 django1.6.5)控制的,先读取,然后判断,没有则抛出PermissionDenied异常。

            (deleted_objects, perms_needed, protected) = get_deleted_objects(
                [obj], opts, request.user, self.admin_site, using)
    
            if request.POST:  # The user has already confirmed the deletion.
                if perms_needed:
                    raise PermissionDenied
    

        总结下,admin后台的控制比较简单,而且漏了一种情况,查看权限。这个设计也不是很优雅。

    转载请注明本文来自:http://www.cnblogs.com/Tommy-Yu/p/4054250.html,谢谢!

  • 相关阅读:
    编译错误总结。
    9.7
    9.5
    9.6
    9.4
    9.3
    FutureTask取结果超时代码小测试
    java concurrent包常用类小结
    java Nio零散知识点整理
    java进阶教程unit_2java常用类(2)
  • 原文地址:https://www.cnblogs.com/Tommy-Yu/p/4054250.html
Copyright © 2011-2022 走看看