Passed
Push — master ( 4a8725...effdde )
by Jordi
04:37
created

bika.lims.api.user.del_group()   B

Complexity

Conditions 6

Size

Total Lines 21
Code Lines 15

Duplication

Lines 21
Ratio 100 %

Importance

Changes 0
Metric Value
eloc 15
dl 21
loc 21
rs 8.6666
c 0
b 0
f 0
cc 6
nop 2
1
# -*- coding: utf-8 -*-
2
#
3
# This file is part of SENAITE.CORE
4
#
5
# Copyright 2018 by it's authors.
6
# Some rights reserved. See LICENSE.rst, CONTRIBUTORS.rst.
7
8
from AccessControl import getSecurityManager
9
from bika.lims.api import get_portal
10
from bika.lims.api import get_tool
11
from Products.CMFPlone.RegistrationTool import get_member_by_login_name
12
from Products.PlonePAS.tools.groupdata import GroupData
13
from Products.PlonePAS.tools.memberdata import MemberData
14
15
16
def get_user(user=None):
17
    """Get the user object
18
19
    :param user: A user id, memberdata object or None for the current user
20
    :returns: Plone User (PlonePAS) / Propertied User (PluggableAuthService)
21
    """
22
    if user is None:
23
        # Return the current authenticated user
24
        user = getSecurityManager().getUser()
25
    elif isinstance(user, MemberData):
26
        # MemberData wrapped user -> get the user object
27
        user = user.getUser()
28
    elif isinstance(user, basestring):
29
        # User ID -> get the user
30
        user = get_member_by_login_name(get_portal(), user, False)
31
        if user:
32
            user = user.getUser()
33
    return user
34
35
36
def get_user_id(user=None):
37
    """Get the user id of the current authenticated user
38
39
    :param user: A user id, memberdata object or None for the current user
40
    :returns: Plone user ID
41
    """
42
    user = get_user(user)
43
    if user is None:
44
        return None
45
    return user.getId()
46
47
48
def get_group(group):
49
    """Return the group
50
51
    :param group: The group name/id
52
    :returns: Group
53
    """
54
    portal_groups = get_tool("portal_groups")
55
    if isinstance(group, basestring):
56
        group = portal_groups.getGroupById(group)
57
    elif isinstance(group, GroupData):
58
        group = group
59
    return group
60
61
62
def get_groups(user=None):
63
    """Return the groups of the user
64
65
    :param user: A user id, memberdata object or None for the current user
66
    :returns: List of groups
67
    """
68
    portal_groups = get_tool("portal_groups")
69
    user = get_user(user)
70
    if user is None:
71
        return []
72
    return portal_groups.getGroupsForPrincipal(user)
73
74
75 View Code Duplication
def add_group(group, user=None):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
76
    """Add the user to the group
77
    """
78
    user = get_user(user)
79
80
    if user is None:
81
        raise ValueError("User '{}' not found".format(repr(user)))
82
83
    if isinstance(group, basestring):
84
        group = [group]
85
    elif isinstance(group, GroupData):
86
        group = [group]
87
88
    portal_groups = get_tool("portal_groups")
89
    for group in map(get_group, group):
90
        if group is None:
91
            continue
92
        portal_groups.addPrincipalToGroup(get_user_id(user), group.getId())
93
94
    return get_groups(user)
95
96
97 View Code Duplication
def del_group(group, user=None):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
98
    """Remove the user to the group
99
    """
100
    user = get_user(user)
101
102
    if user is None:
103
        raise ValueError("User '{}' not found".format(repr(user)))
104
105
    if isinstance(group, basestring):
106
        group = [group]
107
    elif isinstance(group, GroupData):
108
        group = [group]
109
110
    portal_groups = get_tool("portal_groups")
111
    for group in map(get_group, group):
112
        if group is None:
113
            continue
114
        portal_groups.removePrincipalFromGroup(
115
            get_user_id(user), group.getId())
116
117
    return get_groups(user)
118