async def has_perm(_: Response, user=Depends(current_user), perms=Body(...), superuser=Body(True)): try: return await user.has_perm(*listify(perms), superuser=superuser) except BaseORMException: raise x.ServiceError() except Exception: raise x.AppError()
async def ab(): await tempdb() usermod = await UserMod.get(email=VERIFIED_EMAIL_DEMO).only('id') partialkey = s.CACHE_USERNAME.format(usermod.id) await usermod.get_and_cache(usermod.id) groups = await usermod.get_groups() assert Counter(groups) == Counter(s.USER_GROUPS) cached_groups = UserDBComplete( **cache.restoreuser_dict(red.get(partialkey))).groups assert Counter(groups) == Counter(cached_groups) for i in param: addgroups, out = i newgroups = await usermod.add_group(*listify(addgroups)) if newgroups: assert Counter(newgroups) == Counter(out) updatedgroups = await usermod.get_groups() if updatedgroups: assert Counter(updatedgroups) == Counter(out) cached_groups = userdb.usercomplete( **cache.restoreuser_dict(red.get(partialkey))).groups if cached_groups: assert Counter(cached_groups) == Counter(out)
async def remove_grouppermission(res: Response, gp: GroupPermissionVM, user=Depends(current_user)): if not await user.has_perm('permission.detach'): raise x.PermissionDenied() try: if group := await Group.get_or_none(name=gp.name).only('id'): if permlist := await Permission.filter(code__in=listify(gp.codes) ).only('id'): await group.permissions.remove(*permlist) res.status_code = 204
async def ab(): await tempdb() usermod = await UserMod.get(email=VERIFIED_EMAIL_DEMO).only('id') perms = await usermod.get_permissions() assert Counter(perms) == Counter(starterperms) for i in param: addgroups, out = i await usermod.add_group(*listify(addgroups)) perms = await usermod.get_permissions() if perms: assert Counter(perms) == Counter(out)
async def remove_userpermission(res: Response, up: UserPermissionVM, user=Depends(current_user)): if not await user.has_perm('permission.detach'): raise x.PermissionDenied() try: if perms := await Permission.filter(code__in=listify(up.codes) ).values_list('id', flat=True): if userperms := await UserPermissions.filter( user_id=user.id, permission_id__in=perms): for item in userperms: await item.delete() await UserMod.get_and_cache(user.id) res.status_code = 204
async def detach_permission(res: Response, user=Depends(current_user), perms=Body(...)): if not await user.has_perm('permission.detach'): raise x.PermissionDenied() if not perms: raise x.FalsyDataError() try: usermod = await UserMod.get_or_none(email=user.email).only('id') if not usermod: raise x.NotFoundError('User') await usermod.remove_permission(*listify(perms)) res.status_code = 204 except BaseORMException: raise x.ServiceError() except Exception: raise x.AppError()
async def assign_userpermission(res: Response, up: UserPermissionVM, user=Depends(current_user)): if not await user.has_perm('permission.attach'): raise x.PermissionDenied() try: if usermod := await UserMod.get_or_none(pk=user.id).only('id'): if codes := list(set(listify(up.codes)) - set(user.permissions)): if perms := await Permission.filter(code__in=codes).only('id'): ll = [] for perm in perms: ll.append( UserPermissions(user=usermod, permission=perm, author=usermod)) await UserPermissions.bulk_create(ll) await UserMod.get_and_cache(user.id) res.status_code = 204
async def ab(): await tempdb() usermod = await UserMod.get(email=VERIFIED_EMAIL_DEMO).only('id') if usermod: groups = await usermod.add_group('StaffGroup', 'AdminGroup', 'NoaddGroup') assert Counter(groups) == Counter([ 'StaffGroup', 'AdminGroup', 'NoaddGroup', 'ContentGroup', 'AccountGroup' ]) for i in param: removegroup, out = i afterremove = await usermod.remove_group(*listify(removegroup)) assert Counter(afterremove) == Counter(out) partialkey = s.CACHE_USERNAME.format(usermod.id) cached_groups = userdb.usercomplete( **cache.restoreuser_dict(red.get(partialkey))).groups assert Counter(cached_groups) == Counter(out)
async def ab(): await tempdb() usermod = await UserMod.get(email=VERIFIED_EMAIL_DEMO).only('id') for i in param: perms, out = i assert await usermod.has_perm(*listify(perms)) == out
async def ab(): await tempdb() return await Group.get_permissions(*listify(groups), debug=True)
def test_get_permissions(tempdb, loop, groups, perms, remove, src): async def ab(): await tempdb() return await Group.get_permissions(*listify(groups), debug=True) groups = listify(groups) for idx, group in enumerate(groups): partialkey = s.CACHE_GROUPNAME.format(group) remove = listify(remove) if remove[idx]: red.delete(partialkey) assert not red.get(partialkey) assert not red.exists(partialkey) loop.run_until_complete(ab()) # ic(x) # allperms, sources = loop.run_until_complete(ab()) # assert Counter(allperms) == Counter(perms) # assert Counter(sources) == Counter(listify(src)) # param = [ # ('user.create', 'AdminGroup', True), # ('user.create', 'NoaddGroup', True), # ('page.create', 'ContentGroup', True), # ('page.create', 'NoaddGroup', False), # ('page.create', 'abc', False), # ('', 'abc', False), # ('page.create', '', False), # ] # @pytest.mark.parametrize('perm, group, out', param) # @pytest.mark.focus # def test_is_group(loop, perm, group, out): # async def ab(): # assert await Permission.is_group(perm, group) == out # loop.run_until_complete(ab()) # # @pytest.mark.focus # def test_abc(loop, tempdb): # from app.authentication import Option # # async def ab(): # await tempdb() # await Option.create(name='foo', value='bar') # opt = await Option.all() # ic(opt) # # loop.run_until_complete(ab())
async def ab(): await tempdb() groups = await Permission.get_groups(*listify(perms)) assert Counter(groups) == Counter(out)