Esempio n. 1
0
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()
Esempio n. 2
0
    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)
Esempio n. 3
0
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
Esempio n. 4
0
    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)
Esempio n. 5
0
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
Esempio n. 6
0
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()
Esempio n. 7
0
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
Esempio n. 8
0
    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)
Esempio n. 9
0
 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
Esempio n. 10
0
 async def ab():
     await tempdb()
     return await Group.get_permissions(*listify(groups), debug=True)
Esempio n. 11
0
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())
Esempio n. 12
0
 async def ab():
     await tempdb()
     groups = await Permission.get_groups(*listify(perms))
     assert Counter(groups) == Counter(out)