|
11 | 11 | AccountRole, |
12 | 12 | GlobalPermissions, |
13 | 13 | InfrahubKind, |
| 14 | + PermissionAction, |
14 | 15 | PermissionDecision, |
15 | 16 | ) |
16 | 17 | from infrahub.core.graph import GRAPH_VERSION |
@@ -335,6 +336,79 @@ async def create_super_administrator_role(db: InfrahubDatabase) -> Node: |
335 | 336 | return obj |
336 | 337 |
|
337 | 338 |
|
| 339 | +async def create_default_roles(db: InfrahubDatabase) -> Node: |
| 340 | + repo_permission = await Node.init(db=db, schema=InfrahubKind.GLOBALPERMISSION) |
| 341 | + await repo_permission.new( |
| 342 | + db=db, |
| 343 | + name=format_label(GlobalPermissions.MANAGE_REPOSITORIES.value), |
| 344 | + action=GlobalPermissions.MANAGE_REPOSITORIES.value, |
| 345 | + decision=PermissionDecision.ALLOW_ALL.value, |
| 346 | + ) |
| 347 | + await repo_permission.save(db=db) |
| 348 | + |
| 349 | + schema_permission = await Node.init(db=db, schema=InfrahubKind.GLOBALPERMISSION) |
| 350 | + await schema_permission.new( |
| 351 | + db=db, |
| 352 | + name=format_label(GlobalPermissions.MANAGE_SCHEMA.value), |
| 353 | + action=GlobalPermissions.MANAGE_SCHEMA.value, |
| 354 | + decision=PermissionDecision.ALLOW_ALL.value, |
| 355 | + ) |
| 356 | + await schema_permission.save(db=db) |
| 357 | + |
| 358 | + proposed_change_permission = await Node.init(db=db, schema=InfrahubKind.GLOBALPERMISSION) |
| 359 | + await proposed_change_permission.new( |
| 360 | + db=db, |
| 361 | + name=format_label(GlobalPermissions.MERGE_PROPOSED_CHANGE.value), |
| 362 | + action=GlobalPermissions.MERGE_PROPOSED_CHANGE.value, |
| 363 | + decision=PermissionDecision.ALLOW_ALL.value, |
| 364 | + ) |
| 365 | + await proposed_change_permission.save(db=db) |
| 366 | + |
| 367 | + view_permission = await Node.init(db=db, schema=InfrahubKind.OBJECTPERMISSION) |
| 368 | + await view_permission.new( |
| 369 | + db=db, |
| 370 | + name="*", |
| 371 | + namespace="*", |
| 372 | + action=PermissionAction.VIEW.value, |
| 373 | + decision=PermissionDecision.ALLOW_ALL.value, |
| 374 | + ) |
| 375 | + await view_permission.save(db=db) |
| 376 | + |
| 377 | + modify_permission = await Node.init(db=db, schema=InfrahubKind.OBJECTPERMISSION) |
| 378 | + await modify_permission.new( |
| 379 | + db=db, |
| 380 | + name="*", |
| 381 | + namespace="*", |
| 382 | + action=PermissionAction.ANY.value, |
| 383 | + decision=PermissionDecision.ALLOW_OTHER.value, |
| 384 | + ) |
| 385 | + await modify_permission.save(db=db) |
| 386 | + |
| 387 | + role_name = "General Access" |
| 388 | + role = await Node.init(db=db, schema=InfrahubKind.ACCOUNTROLE) |
| 389 | + await role.new( |
| 390 | + db=db, |
| 391 | + name=role_name, |
| 392 | + permissions=[ |
| 393 | + repo_permission, |
| 394 | + schema_permission, |
| 395 | + proposed_change_permission, |
| 396 | + view_permission, |
| 397 | + modify_permission, |
| 398 | + ], |
| 399 | + ) |
| 400 | + await role.save(db=db) |
| 401 | + log.info(f"Created account role: {role_name}") |
| 402 | + |
| 403 | + group_name = "Infrahub Users" |
| 404 | + group = await Node.init(db=db, schema=InfrahubKind.ACCOUNTGROUP) |
| 405 | + await group.new(db=db, name=group_name, roles=[role]) |
| 406 | + await group.save(db=db) |
| 407 | + log.info(f"Created account group: {group_name}") |
| 408 | + |
| 409 | + return role |
| 410 | + |
| 411 | + |
338 | 412 | async def create_super_administrators_group( |
339 | 413 | db: InfrahubDatabase, role: Node, admin_accounts: list[CoreAccount] |
340 | 414 | ) -> Node: |
@@ -411,6 +485,7 @@ async def first_time_initialization(db: InfrahubDatabase) -> None: |
411 | 485 | administrator_role = await create_super_administrator_role(db=db) |
412 | 486 | await create_super_administrators_group(db=db, role=administrator_role, admin_accounts=admin_accounts) |
413 | 487 |
|
| 488 | + await create_default_roles(db=db) |
414 | 489 | # -------------------------------------------------- |
415 | 490 | # Create Default IPAM Namespace |
416 | 491 | # -------------------------------------------------- |
|
0 commit comments