diff --git a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx
index a25a0f5..d721b2e 100644
--- a/web/src/app/submissions/[submissionId]/_reviewButtons.tsx
+++ b/web/src/app/submissions/[submissionId]/_reviewButtons.tsx
@@ -1,4 +1,4 @@
-import { Roles } from "@/app/ts/Roles";
+import { Roles, RolesConstants } from "@/app/ts/Roles";
 import { SubmissionStatus } from "@/app/ts/Submission";
 import { Button, ButtonOwnProps } from "@mui/material";
 import { useState, useEffect } from "react";
@@ -65,7 +65,7 @@ export default function ReviewButtons(props: ReviewId) {
 	// ResetUploading | MapAdmin  | Uploading
 	const { submissionId, submissionStatus } = props;
 	const [user, setUser] = useState<number|null>(null);
-	const [roles, setRoles] = useState<Roles>(Roles.Empty);
+	const [roles, setRoles] = useState<Roles>(RolesConstants.Empty);
 	const [loading, setLoading] = useState(true);
 
 	useEffect(() => {
@@ -101,7 +101,7 @@ export default function ReviewButtons(props: ReviewId) {
 		}
 	}
 
-	if (roles&Roles.SubmissionReview) {
+	if (roles&RolesConstants.SubmissionReview) {
 		if (submissionStatus === SubmissionStatus.Submitted) {
 			visibleButtons.push({ name: "Accept", action: "trigger-validate", color: "info", submissionId });
 			visibleButtons.push({ name: "Reject", action: "reject", color: "error", submissionId });
@@ -117,7 +117,7 @@ export default function ReviewButtons(props: ReviewId) {
 		}
 	}
 
-	if (roles&Roles.SubmissionUpload) {
+	if (roles&RolesConstants.SubmissionUpload) {
 		if (submissionStatus === SubmissionStatus.Validated) {
 			visibleButtons.push({ name: "Upload", action: "trigger-upload", color: "info", submissionId });
 		}
diff --git a/web/src/app/ts/Roles.ts b/web/src/app/ts/Roles.ts
index af94e36..57a7d9d 100644
--- a/web/src/app/ts/Roles.ts
+++ b/web/src/app/ts/Roles.ts
@@ -1,15 +1,25 @@
-// Submissions roles bitflag
-enum Roles {
-  SubmissionUpload = 1 << 6,
-  SubmissionReview = 1 << 5,
-  SubmissionRelease = 1 << 4,
-  ScriptWrite = 1 << 3,
-  MapfixUpload = 1 << 2,
-  MapfixReview = 1 << 1,
-  MapDownload = 1 << 0,
-  Empty = 0
+type Roles = number;
+
+// Constants
+const RolesConstants = {
+  All: -1 as Roles,
+  SubmissionUpload: 1 << 6 as Roles,
+  SubmissionReview: 1 << 5 as Roles,
+  SubmissionRelease: 1 << 4 as Roles,
+  ScriptWrite: 1 << 3 as Roles,
+  MapfixUpload: 1 << 2 as Roles,
+  MapfixReview: 1 << 1 as Roles,
+  MapDownload: 1 << 0 as Roles,
+  Empty: 0 as Roles,
+};
+
+// Operations
+function hasRole(flags: Roles, role: Roles): boolean {
+  return (flags & role) === role;
 }
 
 export {
-	Roles,
-}
+  type Roles,
+  RolesConstants,
+  hasRole,
+};