Passed
Push — master ( 4b1f79...4860bd )
by
unknown
03:25
created

RoleAssignmentsController   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 32
rs 10
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A get_all() 0 9 1
A get_one() 0 10 1
1
# Licensed to the StackStorm, Inc ('StackStorm') under one or more
2
# contributor license agreements.  See the NOTICE file distributed with
3
# this work for additional information regarding copyright ownership.
4
# The ASF licenses this file to You under the Apache License, Version 2.0
5
# (the "License"); you may not use this file except in compliance with
6
# the License.  You may obtain a copy of the License at
7
#
8
#     http://www.apache.org/licenses/LICENSE-2.0
9
#
10
# Unless required by applicable law or agreed to in writing, software
11
# distributed under the License is distributed on an "AS IS" BASIS,
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
# See the License for the specific language governing permissions and
14
# limitations under the License.
15
16
import copy
17
18
from st2api.controllers.resource import ResourceController
19
from st2common.models.api.rbac import RoleAPI
20
from st2common.models.api.rbac import UserRoleAssignmentAPI
21
from st2common.persistence.rbac import Role
22
from st2common.persistence.rbac import UserRoleAssignment
23
from st2common.rbac.types import RESOURCE_TYPE_TO_PERMISSION_TYPES_MAP
24
from st2common.rbac import utils as rbac_utils
25
from st2common.router import exc
26
27
__all__ = [
28
    'RolesController',
29
    'RoleAssignmentsController',
30
    'PermissionTypesController'
31
]
32
33
34
class RolesController(ResourceController):
35
    model = RoleAPI
36
    access = Role
37
    supported_filters = {
38
        'name': 'name',
39
        'system': 'system'
40
    }
41
42
    query_options = {
43
        'sort': ['name']
44
    }
45
46
    def get_one(self, name_or_id, requester_user):
47
        rbac_utils.assert_user_is_admin(user_db=requester_user)
48
49
        return self._get_one_by_name_or_id(name_or_id=name_or_id,
50
                                           permission_type=None,
51
                                           requester_user=requester_user)
52
53
    def get_all(self, requester_user, sort=None, offset=0, limit=None, **raw_filters):
54
        rbac_utils.assert_user_is_admin(user_db=requester_user)
55
        return self._get_all(sort=sort,
56
                             offset=offset,
57
                             limit=limit,
58
                             raw_filters=raw_filters)
59
60
61
class RoleAssignmentsController(ResourceController):
62
    """
63
    Meta controller for listing role assignments.
64
    """
65
    model = UserRoleAssignmentAPI
66
    access = UserRoleAssignment
67
    supported_filters = {
68
        'user': 'user',
69
        'role': 'role',
70
        'remote': 'is_remote'
71
    }
72
73
    def get_all(self, requester_user, sort=None, offset=0, limit=None, **raw_filters):
74
        user = raw_filters.get('user', None)
75
        rbac_utils.assert_user_is_admin_or_operating_on_own_resource(user_db=requester_user,
76
                                                                     user=user)
77
78
        return self._get_all(sort=sort,
79
                             offset=offset,
80
                             limit=limit,
81
                             raw_filters=raw_filters)
82
83
    def get_one(self, id, requester_user):
0 ignored issues
show
Bug Best Practice introduced by
This seems to re-define the built-in id.

It is generally discouraged to redefine built-ins as this makes code very hard to read.

Loading history...
84
        result = self._get_one_by_id(id,
85
                                   requester_user=requester_user,
86
                                   permission_type=None)
87
        user = getattr(result, 'user', None)
88
89
        rbac_utils.assert_user_is_admin_or_operating_on_own_resource(user_db=requester_user,
90
                                                                     user=user)
91
92
        return result
93
94
95
class PermissionTypesController(object):
96
    """
97
    Meta controller for listing all the available permission types.
98
    """
99
100
    def get_all(self, requester_user):
101
        """
102
            List all the available permission types.
103
104
            Handles requests:
105
                GET /rbac/permission_types
106
        """
107
        rbac_utils.assert_user_is_admin(user_db=requester_user)
108
109
        result = copy.deepcopy(RESOURCE_TYPE_TO_PERMISSION_TYPES_MAP)
110
        return result
111
112
    def get_one(self, resource_type, requester_user):
113
        """
114
            List all the available permission types for a particular resource type.
115
116
            Handles requests:
117
                GET /rbac/permission_types
118
        """
119
        rbac_utils.assert_user_is_admin(user_db=requester_user)
120
121
        permission_types = RESOURCE_TYPE_TO_PERMISSION_TYPES_MAP.get(resource_type, None)
122
        if permission_types is None:
123
            raise exc.HTTPNotFound('Invalid resource type: %s' % (resource_type))
124
125
        return permission_types
126
127
128
roles_controller = RolesController()
129
role_assignments_controller = RoleAssignmentsController()
130
permission_types_controller = PermissionTypesController()
131