about summary refs log tree commit diff
path: root/migrations/auth/20250731_01_Ke1us-add-sysadmin-privileges-for-acting-on-groups-members.py
blob: 95a6fbb4fa0bdf400383ac54d55200965b130693 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
"""
Add sysadmin privileges for acting on groups: mostly handling user management.
"""
import itertools
import contextlib

from yoyo import step

__depends__ = {'20250729_03_oCvvq-grant-role-to-all-resources-to-sys-admin-users'}


def system_administrator_role_id(cursor):
    """Fetch ID for role 'system-administrator'."""
    cursor.execute(
        "SELECT role_id FROM roles WHERE role_name='system-administrator'")
    return cursor.fetchone()[0]


def add_group_privileges_to_sysadmin_role(conn):
    """Add group-management privileges to sysadmin role."""
    with contextlib.closing(conn.cursor()) as cursor:
        sysadminroleid = system_administrator_role_id(cursor)
        cursor.executemany(
            "INSERT INTO role_privileges(role_id, privilege_id) VALUES (?, ?)",
            tuple(itertools.product(
                (sysadminroleid,),
                ('system:group:add-group-member',
                 'system:group:remove-group-member',
                 'system:group:assign-group-leader',
                 'system:group:revoke-group-leader'))))


def remove_group_privileges_to_sysadmin_role(conn):
    """Remove group-management privileges from sysadmin role."""
    with contextlib.closing(conn.cursor()) as cursor:
        sysadminroleid = system_administrator_role_id(cursor)
        cursor.executemany(
            "DELETE FROM role_privileges WHERE role_id=? AND privilege_id=?",
            tuple(itertools.product(
                (sysadminroleid,),
                ('system:group:add-group-member',
                 'system:group:remove-group-member',
                 'system:group:assign-group-leader',
                 'system:group:revoke-group-leader'))))


steps = [
    step(
        """
        INSERT INTO privileges(privilege_id, privilege_description)
        VALUES
          ('system:group:add-group-member',
           'Make an existing user a member of a group.'),
          ('system:group:remove-group-member',
           'Remove a member user from a group.'),
          ('system:group:assign-group-leader',
           'Assign an existing group member the group-leader role'),
          ('system:group:revoke-group-leader',
           'Revoke the group-leader role from a group member with the role.')
        """,
        """
        DELETE FROM privileges WHERE privilege_id IN
        ('system:group:add-group-member',
         'system:group:remove-group-member',
         'system:group:assign-group-leader',
         'system:group:revoke-group-leader')
        """),
    step(add_group_privileges_to_sysadmin_role,
         remove_group_privileges_to_sysadmin_role)
]