relocate permissions

This commit is contained in:
Alex Holliday committed 2025-11-30 17:08:31 +00:00
1 parent 6eabaebd86
commit d76da4b00c
18 files changed
+114 -96

No files matched your search

+2 -1
View File
@@ -2,4 +2,5 @@
.vscode
.VSCodeCounter
AGENTS.md
*.sh
*.sh
notes
+1 -1
View File
@@ -1,6 +1,6 @@
import { Request, Response, NextFunction } from "express";
import ApiError from "@/utils/ApiError.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
export const hasPermission = (
permissions: string[],
requiredPermissions: string[]
+1 -1
View File
@@ -5,7 +5,7 @@ import { verifyToken } from "@/middleware/VerifyToken.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { validateQuery } from "@/middleware/validation.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { checksStatusIdQuerySchema } from "@/validation/index.js";
class CheckRoutes {
+1 -1
View File
@@ -3,7 +3,7 @@ import { DiagnosticController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
class DiagnosticRoutes {
private router;
+1 -1
View File
@@ -5,7 +5,7 @@ import { verifyToken } from "@/middleware/VerifyToken.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { validateQuery, validateBody } from "@/middleware/validation.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import {
getIncidentsQuerySchema,
patchIncidentsBodySchema,
+1 -1
View File
@@ -3,7 +3,7 @@ import { InviteController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { validateBody } from "@/middleware/validation.js";
import { inviteSchema } from "@/validation/index.js";
class InviteRoutes {
+1 -1
View File
@@ -3,7 +3,7 @@ import { MaintenanceController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyTeamPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
class MaintenanceRoutes {
private router;
+1 -1
View File
@@ -6,7 +6,7 @@ import {
verifyTeamPermission,
} from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { validateBody, validateQuery } from "@/middleware/validation.js";
import {
enforceMax,
+1 -1
View File
@@ -4,7 +4,7 @@ import { NotificationChannelController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyTeamPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { validateBody } from "@/middleware/validation.js";
import { enforceMax, requireFeature } from "@/middleware/VerifyEntitlements.js";
import {
+1 -1
View File
@@ -4,7 +4,7 @@ import { RoleController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
class RoleRoutes {
private controller: RoleController;
+1 -1
View File
@@ -3,7 +3,7 @@ import { SettingsController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyTeamPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { validateBody } from "@/middleware/validation.js";
import {
systemSettingsSchema,
+1 -1
View File
@@ -4,7 +4,7 @@ import { StatusPageController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { verifyTeamPermission } from "@/middleware/VerifyPermission.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
import { validateBody } from "@/middleware/validation.js";
import { statusPageSchema } from "@/validation/index.js";
import { enforceMax } from "@/middleware/VerifyEntitlements.js";
+1 -1
View File
@@ -6,7 +6,7 @@ import { verifyToken } from "@/middleware/VerifyToken.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { enforceMax } from "@/middleware/VerifyEntitlements.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
class TeamRoutes {
private controller: TeamController;
+1 -1
View File
@@ -4,7 +4,7 @@ import { TeamMemberController } from "@/controllers/index.js";
import { verifyToken } from "@/middleware/VerifyToken.js";
import { addUserContext } from "@/middleware/AddUserContext.js";
import { verifyOrgPermission } from "@/middleware/VerifyPermission.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
class TeamMemberRoutes {
private controller: TeamMemberController;
+1 -80
View File
@@ -21,89 +21,10 @@ import ApiError from "@/utils/ApiError.js";
import { IJobQueue } from "../infrastructure/JobQueue.js";
import { hashPassword } from "@/utils/JWTUtils.js";
import { Plans } from "@/types/entitlements.js";
import { PERMISSIONS } from "@/types/permissions.js";
const SERVICE_NAME = "AuthService";
export const PERMISSIONS = {
master: "master",
users: {
all: "users.*",
write: "users.write",
read: "users.read",
delete: "users.delete",
},
monitors: {
all: "monitors.*",
write: "monitors.write",
read: "monitors.read",
update: "monitors.update",
delete: "monitors.delete",
},
notifications: {
all: "notifications.*",
write: "notifications.write",
read: "notifications.read",
update: "notifications.update",
delete: "notifications.delete",
},
maintenance: {
all: "maintenance.*",
write: "maintenance.write",
read: "maintenance.read",
update: "maintenance.update",
delete: "maintenance.delete",
},
invite: {
all: "invite.*",
write: "invite.write",
read: "invite.read",
delete: "invite.delete",
},
checks: {
all: "checks.*",
write: "checks.write",
read: "checks.read",
update: "checks.update",
delete: "checks.delete",
},
statusPages: {
all: "statusPages.*",
write: "statusPages.write",
read: "statusPages.read",
update: "statusPages.update",
delete: "statusPages.delete",
},
teams: {
all: "teams.*",
write: "teams.write",
read: "teams.read",
update: "teams.update",
delete: "teams.delete",
},
roles: {
all: "roles.*",
write: "roles.write",
read: "roles.read",
update: "roles.update",
delete: "roles.delete",
},
diagnostic: {
all: "diagnostic.*",
write: "diagnostic.write",
read: "diagnostic.read",
update: "diagnostic.update",
delete: "diagnostic.delete",
},
incidents: {
all: "incidents.*",
write: "incidents.write",
read: "incidents.read",
update: "incidents.update",
delete: "incidents.delete",
},
};
export type RegisterData = {
firstName: string;
lastName: string;
+1 -1
View File
@@ -11,7 +11,7 @@ import {
} from "@/db/models/index.js";
import type { IJobQueue } from "../infrastructure/JobQueue.js";
import ApiError from "@/utils/ApiError.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
const SERVICE_NAME = "TeamService";
export interface ITeamService {
+96
View File
@@ -0,0 +1,96 @@
export const PERMISSIONS = {
master: "master",
users: {
all: "users.*",
write: "users.write",
read: "users.read",
delete: "users.delete",
},
monitors: {
all: "monitors.*",
write: "monitors.write",
read: "monitors.read",
update: "monitors.update",
delete: "monitors.delete",
},
notifications: {
all: "notifications.*",
write: "notifications.write",
read: "notifications.read",
update: "notifications.update",
delete: "notifications.delete",
},
maintenance: {
all: "maintenance.*",
write: "maintenance.write",
read: "maintenance.read",
update: "maintenance.update",
delete: "maintenance.delete",
},
invite: {
all: "invite.*",
write: "invite.write",
read: "invite.read",
delete: "invite.delete",
},
checks: {
all: "checks.*",
write: "checks.write",
read: "checks.read",
update: "checks.update",
delete: "checks.delete",
},
statusPages: {
all: "statusPages.*",
write: "statusPages.write",
read: "statusPages.read",
update: "statusPages.update",
delete: "statusPages.delete",
},
teams: {
all: "teams.*",
write: "teams.write",
read: "teams.read",
update: "teams.update",
delete: "teams.delete",
},
roles: {
all: "roles.*",
write: "roles.write",
read: "roles.read",
update: "roles.update",
delete: "roles.delete",
},
diagnostic: {
all: "diagnostic.*",
write: "diagnostic.write",
read: "diagnostic.read",
update: "diagnostic.update",
delete: "diagnostic.delete",
},
incidents: {
all: "incidents.*",
write: "incidents.write",
read: "incidents.read",
update: "incidents.update",
delete: "incidents.delete",
},
billing: {
all: "billing.*",
},
};
export type Permission =
| typeof PERMISSIONS.master
| (typeof PERMISSIONS.users)[keyof typeof PERMISSIONS.users]
| (typeof PERMISSIONS.monitors)[keyof typeof PERMISSIONS.monitors]
| (typeof PERMISSIONS.notifications)[keyof typeof PERMISSIONS.notifications]
| (typeof PERMISSIONS.maintenance)[keyof typeof PERMISSIONS.maintenance]
| (typeof PERMISSIONS.invite)[keyof typeof PERMISSIONS.invite]
| (typeof PERMISSIONS.checks)[keyof typeof PERMISSIONS.checks]
| (typeof PERMISSIONS.statusPages)[keyof typeof PERMISSIONS.statusPages]
| (typeof PERMISSIONS.teams)[keyof typeof PERMISSIONS.teams]
| (typeof PERMISSIONS.roles)[keyof typeof PERMISSIONS.roles]
| (typeof PERMISSIONS.diagnostic)[keyof typeof PERMISSIONS.diagnostic]
| (typeof PERMISSIONS.incidents)[keyof typeof PERMISSIONS.incidents]
| (typeof PERMISSIONS.billing)[keyof typeof PERMISSIONS.billing];
+1 -1
View File
@@ -1,5 +1,5 @@
import { config } from "@/config/index.js";
import { PERMISSIONS } from "@/services/business/AuthService.js";
import { PERMISSIONS } from "@/types/permissions.js";
export type DeploymentMode = "saas" | "self_hosted";
const CURRENT_MODE = config.DEPLOYMENT_MODE;