diff --git a/db/db.ddl b/db/db.ddl
index 83bfb7a4560db2f29d8b8853d6841322fb917d8f..52b984df0d15ac1079af412be6ce5432a8a19a53 100644
--- a/db/db.ddl
+++ b/db/db.ddl
@@ -197,6 +197,7 @@ CREATE TYPE role_type AS ENUM (
'garant', -- celostátní garant (může být omezený na kategorii)
'garant_kraj', -- krajský garant
'garant_okres', -- okresní garant
+ 'garant_skola', -- školní garant
'dozor', -- dozor na soutěži (může odevzdávat řešení za účastníky)
'opravovatel' -- opravovatel
);
diff --git a/db/upgrade-20210115b.sql b/db/upgrade-20210115b.sql
new file mode 100644
index 0000000000000000000000000000000000000000..1262c92398ea0341655f77a7d2a319406515d2ab
--- /dev/null
+++ b/db/upgrade-20210115b.sql
@@ -0,0 +1,3 @@
+SET ROLE 'mo_osmo';
+
+ALTER TYPE role_type ADD VALUE 'garant_skola' AFTER 'garant_okres';
diff --git a/mo/db.py b/mo/db.py
index ec1dfe01929e9e2305d5ab8ce19424412d0bb423..cd9d0a39853c5c130ccfe3ddd343ca022fb761ce 100644
--- a/mo/db.py
+++ b/mo/db.py
@@ -348,6 +348,7 @@ class RoleType(MOEnum):
garant = auto()
garant_kraj = auto()
garant_okres = auto()
+ garant_skola = auto()
dozor = auto()
opravovatel = auto()
@@ -359,6 +360,7 @@ role_type_names = {
RoleType.garant: 'celostátní garant',
RoleType.garant_kraj: 'krajský garant',
RoleType.garant_okres: 'okresní garant',
+ RoleType.garant_skola: 'školní garant',
RoleType.dozor: 'dozor',
RoleType.opravovatel: 'opravovatel',
}
diff --git a/mo/rights.py b/mo/rights.py
index a9daeb9c436718c62f1d8f6d9be3580fbdbafc57..63a4e5db9767c701d91b4fbc86edb20e06f9c18d 100644
--- a/mo/rights.py
+++ b/mo/rights.py
@@ -84,6 +84,21 @@ roles: List[Role] = [
Right.edit_users,
},
),
+ Role(
+ role=db.RoleType.garant_skola,
+ rights={
+ # FIXME: Až se pořádně rozjedou školní kola, asi chceme školním správcům omezit
+ # práva na editaci uživatelů. Viz issue #66.
+ Right.assign_rights,
+ Right.edit_place,
+ Right.manage_contest,
+ Right.view_submits,
+ Right.upload_submits,
+ Right.edit_points,
+ Right.add_users,
+ Right.edit_users,
+ },
+ ),
Role(
role=db.RoleType.dozor,
rights={