Skip to content

Commit da456dd

Browse files
committed
IAM User: add custom_props field for admin usage
1 parent da81fa5 commit da456dd

14 files changed

Lines changed: 143 additions & 61 deletions

File tree

genesis_core/tests/functional/restapi/iam/test_users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ def test_update_my_user_update_password_test1_auth_bad_request(
239239
):
240240
client = user_api_client(auth_test1_user)
241241

242-
with pytest.raises(bazooka_exc.BadRequestError):
242+
with pytest.raises(bazooka_exc.ForbiddenError):
243243
client.update_user(
244244
auth_test1_user.uuid,
245245
password="new password",

genesis_core/user_api/compute/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import uuid as sys_uuid
1818

19-
from gcl_iam import controllers as iam_controllers
19+
from gcl_iam.api import controllers as iam_controllers
2020
from restalchemy.api import actions
2121
from restalchemy.api import controllers
2222
from restalchemy.api import resources

genesis_core/user_api/config/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17-
from gcl_iam import controllers as iam_controllers
17+
from gcl_iam.api import controllers as iam_controllers
1818
from restalchemy.api import controllers
1919
from restalchemy.api import resources
2020

genesis_core/user_api/dns/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# under the License.
1616

1717
from oslo_config import cfg
18-
from gcl_iam import controllers as iam_controllers
18+
from gcl_iam.api import controllers as iam_controllers
1919
from restalchemy.api import controllers as ra_controllers
2020
from restalchemy.api import constants
2121
from restalchemy.api import field_permissions as field_p

genesis_core/user_api/em/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# under the License.
1616

1717

18-
from gcl_iam import controllers as iam_controllers
18+
from gcl_iam.api import controllers as iam_controllers
1919
from restalchemy.dm import filters as dm_filters
2020
from restalchemy.api import actions
2121
from restalchemy.api import controllers

genesis_core/user_api/iam/api/controllers.py

Lines changed: 28 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,11 @@
2424

2525
from authlib.integrations import requests_client
2626
import jinja2
27-
from gcl_iam import controllers as iam_controllers
27+
from gcl_iam.api import controllers as iam_controllers
28+
from gcl_iam.api import field_perms as iam_fp
29+
from gcl_iam import rules
2830
from restalchemy.api import actions
31+
from restalchemy.api import constants as ra_c
2932
from restalchemy.api import controllers
3033
from restalchemy.api import resources
3134
from restalchemy.common import contexts
@@ -119,50 +122,30 @@ class UserController(
119122
models.User,
120123
convert_underscore=False,
121124
process_filters=True,
122-
hidden_fields=resources.HiddenFieldMap(
123-
get=[
124-
"user_source",
125-
"salt",
126-
"secret_hash",
127-
"secret",
128-
"otp_secret",
129-
"confirmation_code",
130-
"confirmation_code_made_at",
131-
],
132-
create=[
133-
"salt",
134-
"secret_hash",
135-
"otp_secret",
136-
"confirmation_code",
137-
"confirmation_code_made_at",
138-
],
139-
update=[
140-
"user_source",
141-
"salt",
142-
"secret_hash",
143-
"secret",
144-
"otp_secret",
145-
"confirmation_code",
146-
"confirmation_code_made_at",
147-
],
148-
filter=[
149-
"user_source",
150-
"salt",
151-
"secret_hash",
152-
"secret",
153-
"otp_secret",
154-
"confirmation_code",
155-
"confirmation_code_made_at",
156-
],
157-
action_post=[
158-
"user_source",
159-
"salt",
160-
"secret_hash",
161-
"secret",
162-
"otp_secret",
163-
"confirmation_code",
164-
"confirmation_code_made_at",
165-
],
125+
fields_permissions=iam_fp.FieldsIamPermissions(
126+
default=iam_fp.Permissions.RW,
127+
fields={
128+
"salt": {ra_c.ALL: iam_fp.Permissions.HIDDEN},
129+
"user_source": {
130+
ra_c.ALL: iam_fp.Permissions.HIDDEN,
131+
ra_c.CREATE: iam_fp.Permissions.RW,
132+
},
133+
"secret": {
134+
ra_c.ALL: iam_fp.Permissions.HIDDEN,
135+
ra_c.CREATE: iam_fp.Permissions.RW,
136+
},
137+
"secret_hash": {ra_c.ALL: iam_fp.Permissions.HIDDEN},
138+
"otp_secret": {ra_c.ALL: iam_fp.Permissions.HIDDEN},
139+
"confirmation_code": {ra_c.ALL: iam_fp.Permissions.HIDDEN},
140+
"confirmation_code_made_at": {ra_c.ALL: iam_fp.Permissions.HIDDEN},
141+
"custom_props": {
142+
ra_c.GET: rules.Rule("iam", "user_custom_props", "read"),
143+
ra_c.FILTER: rules.Rule("iam", "user_custom_props", "list"),
144+
ra_c.CREATE: rules.Rule("iam", "user_custom_props", "create"),
145+
ra_c.UPDATE: rules.Rule("iam", "user_custom_props", "update"),
146+
ra_c.DELETE: rules.Rule("iam", "user_custom_props", "delete"),
147+
},
148+
},
166149
),
167150
name_map={"secret": "password", "name": "username"},
168151
)

genesis_core/user_api/iam/dm/models.py

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,39 @@ def process_secret(self, user, secret):
227227
user.update()
228228

229229

230+
class IamUserCustomProps(ra_types_dynamic.AbstractKindModel):
231+
KIND = "basic"
232+
233+
role = properties.property(
234+
ra_types.String(min_length=0, max_length=255),
235+
default=None,
236+
)
237+
legal_entity = properties.property(
238+
ra_types.String(min_length=0, max_length=255),
239+
default=None,
240+
)
241+
employment_format = properties.property(
242+
ra_types.String(min_length=0, max_length=255),
243+
default=None,
244+
)
245+
hire_date = properties.property(
246+
ra_types.AllowNone(ra_types.UTCDateTimeZ()),
247+
default=None,
248+
)
249+
layoff_date = properties.property(
250+
ra_types.AllowNone(ra_types.UTCDateTimeZ()),
251+
default=None,
252+
)
253+
birth_date = properties.property(
254+
ra_types.AllowNone(ra_types.UTCDateTimeZ()),
255+
default=None,
256+
)
257+
other = properties.property(
258+
ra_types.Dict(),
259+
default=dict,
260+
)
261+
262+
230263
class User(
231264
models.ModelWithUUID,
232265
models.ModelWithRequiredNameDesc,
@@ -294,6 +327,15 @@ class User(
294327
default=False,
295328
)
296329

330+
custom_props = properties.property(
331+
ra_types.AllowNone(
332+
KindModelSelectorType(
333+
ra_types_dynamic.KindModelType(IamUserCustomProps),
334+
)
335+
),
336+
default=None,
337+
)
338+
297339
def get_response_body(self):
298340
return {
299341
"uuid": str(self.uuid),
@@ -774,6 +816,7 @@ def get_response_body(self):
774816
"confirmation_code",
775817
"confirmation_code_made_at",
776818
"user_source",
819+
"custom_props",
777820
]
778821
user = self._user.get_storable_snapshot()
779822
for drop_field in skip_fields:

genesis_core/user_api/network/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
# under the License.
1616

1717
from oslo_config import cfg
18-
from gcl_iam import controllers as iam_controllers
18+
from gcl_iam.api import controllers as iam_controllers
1919
from restalchemy.api import controllers as ra_controllers
2020
from restalchemy.api import constants
2121
from restalchemy.api import field_permissions as field_p

genesis_core/user_api/secret/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17-
from gcl_iam import controllers as iam_controllers
17+
from gcl_iam.api import controllers as iam_controllers
1818
from restalchemy.api import controllers
1919
from restalchemy.api import constants as ra_c
2020
from restalchemy.api import field_permissions as field_p

genesis_core/user_api/security/api/controllers.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
# License for the specific language governing permissions and limitations
1515
# under the License.
1616

17-
from gcl_iam import controllers as iam_controllers
17+
from gcl_iam.api import controllers as iam_controllers
1818
from restalchemy.api import controllers as ra_controllers
1919
from restalchemy.api import resources
2020

0 commit comments

Comments
 (0)