2018-06-20 用户权限分组问题
用户组及权限分配
组对象包含的字段只有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:
"""