2018-06-20 用户权限分组问题

2018-06-20  本文已影响0人  梦Delete

用户组及权限分配

组对象包含的字段只有name,但是外键了几张表,能够与user、permissions,产生多对多的关系,我在自定义权限实现中,采用的是权限写死的方法,添加用户组权限。

创建组的函数采用Group.objects.create(name=xxx),就能实现了。当然也跟创建用户一样,需要先判断是否组名已经存在。

创建好组名后,下一步就需要为每个组分配权限了,从前端提交过来的权限列表,然后后端采用groups.permissions.add(permission)的方式依次将权限添加进组。

添加完组权限后,最后一步是将组名添加进用户属性,区分用户属于哪个组。 

具体实现代码如下:

# 创建组try:

    Group.objects.get(name=role_name)

    data = {'code': -7, 'info': u'组名已存在'}except Group.DoesNotExist:

    groups = Group.objects.create(name=role_name)

    if log_manage == 'true':

        permission = Permission.objects.get(codename='access_log')

        groups.permissions.add(permission)

    if role_manage == 'true':

        permission = Permission.objects.get(codename='access_role_manage')

        groups.permissions.add(permission)

    if user_manage == 'true':

        permission = Permission.objects.get(codename='access_user_manage')

        groups.permissions.add(permission)

    if get_users is not None:

        for user in get_users:

            # 每个user添加组属性            db_user = get_object_or_404(User, username=user)

            db_user.groups.add(groups)

            data = {'code': 1, 'info': u'添加成功'}

    return HttpResponse(json.dumps(data))

权限模型及权限控制

在上一点中用到的Permission.objects.get(codename='access_user_manage')是通过权限模型创建,需要在models中创建一个权限类,然后在meta中进行定义codename。

classAccessControl(models.Model): """

    自定义权限控制

    """    classMeta:        permissions = (

            ('access_dashboard', u'控制面板'),

            ('access_log', u'日志管理'),

            ('access_role_manage', u'角色管理'),

            ('access_user_manage', u'用户管理'),

        )

运行后,会自动在数据库中创建相应的表,并且插入数据。

在创建好权限之后,下一步就是在各个视图中插入权限控制代码了。permission_required(),参数为当前应用名.codename。这样就能控制用户访问,如果用户非法访问则会清空session退出登录。

@permission_required('webcenter.access_role_manage')@login_requireddefrole_index(request): """

    角色管理首页

    :param request:

    :return:

    """

上一篇下一篇

猜你喜欢

热点阅读