成都网站建设设计

将想法与焦点和您一起共享

idcops中用户权限与菜单怎么设置

本文小编为大家详细介绍“idcops中用户权限与菜单怎么设置”,内容详细,步骤清晰,细节处理妥当,希望这篇“idcops中用户权限与菜单怎么设置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

在成都做网站、成都网站建设过程中,需要针对客户的行业特点、产品特性、目标受众和市场情况进行定位分析,以确定网站的风格、色彩、版式、交互等方面的设计方向。成都创新互联公司还需要根据客户的需求进行功能模块的开发和设计,包括内容管理、前台展示、用户权限管理、数据统计和安全保护等功能。

事实上,Django自带的用户权限管理模块功能已经满足大部分的权限管理场景。

针对普通系统用户的权限控制是非常灵活的,既可以通过组来限制,又可以通过单个用户额外再进行限制。

针对激活的超级用户,会拥有所有权限,会直接返回True以拥有所有权限。下面是从 django.contrib.auth.models.PermissionsMixin 模块源码中找出的代码。

def has_perm(self, perm, obj=None):    """    Return True if the user has the specified permission. Query all    available auth backends, but return immediately if any backend returns    True. Thus, a user who has permission from a single auth backend is    assumed to have permission in general. If an object is provided, check    permissions for that object.    """    # Active superusers have all permissions.    if self.is_active and self.is_superuser:        return True
   # Otherwise we need to check the backends.    return _user_has_perm(self, perm, obj)

在idcops中,我每个模型都给定了初始的默认权限如下:

default_permissions = ('view', 'add', 'change', 'delete', 'export')

对应生成(ModelName为idcops应用下的任意个模型):

idcops.view_ModelName == 查看权限idcops.add_ModelName  == 新建权限idcops.change_ModelName  == 修改权限idcops.delete_ModelName  == 删除权限idcops.export_ModelName  == 导出到Excel表权限


Django中判断一个用户实例是否拥有某种权限:

user.has_perm('idcops.add_online')# 判断用户是否有新建(Online)在线设备的权限

django-idcops构造菜单的代码主要在mixins.py文件中一个叫construct_menus 的函数。代码片段如下:

def construct_menus(user):    model_names = []    for app in apps.get_app_config('idcops').get_models():        opts = app._meta        if has_permission(opts, user, 'view') and \                not getattr(opts, 'hidden', False):            icon_color = 'text-' + opts.icon_color if opts.icon_color else ''            meta = {                'model_name': opts.model_name,                'verbose_name': opts.verbose_name,                'icon': opts.icon,                'icon_color': icon_color,                'level': opts.level,                'group': opts.group            }            model_names.append(meta)    counts = list(set([i.get('level') for i in model_names]))    new_menus = []    for i in counts:        new_menus.append(            [c for c in model_names if c.get('level') == i]        )    return new_menus

上面代码会根据level的不同个数,正序排列生成多个列表,每个列表中对应的元素由字典组成,每个字典包含如下信息:

[  [{    'model_name': 'online', 'verbose_name': '在线设备',    'icon': 'fa fa-server', 'icon_color': 'text-green',    'level': 0, 'group': '设备管理'  },],]

以下是我templates渲染菜单的代码片段:

            {%for menu in menus%}        {%for m in menu%}                                                    {{m.verbose_name}}                        

这样,便可以根据每个用户是否有读取某个模块的权限来进行动态生成用户菜单到前端页面了。

读到这里,这篇“idcops中用户权限与菜单怎么设置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。


当前题目:idcops中用户权限与菜单怎么设置
网址分享:http://chengdu.cdxwcx.cn/article/jjhdji.html