Skip to content

Commit c355fdf

Browse files
committed
feat(perms): slot manager between viewer and developer in rank
1 parent 2996a41 commit c355fdf

2 files changed

Lines changed: 15 additions & 5 deletions

File tree

apps/dashboard/server/lib/permissions.test.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,31 @@ import { describe, expect, test } from "bun:test"
22
import { compareRole, type ProjectRoleName } from "./permissions"
33

44
describe("compareRole", () => {
5-
const roles: ProjectRoleName[] = ["viewer", "developer", "owner"]
5+
const roles: ProjectRoleName[] = ["viewer", "manager", "developer", "owner"]
66

77
test("owner satisfies all minimums", () => {
88
for (const min of roles) {
99
expect(compareRole("owner", min)).toBe(true)
1010
}
1111
})
1212

13-
test("developer satisfies developer and viewer, not owner", () => {
13+
test("developer satisfies developer, manager, and viewer, not owner", () => {
1414
expect(compareRole("developer", "viewer")).toBe(true)
15+
expect(compareRole("developer", "manager")).toBe(true)
1516
expect(compareRole("developer", "developer")).toBe(true)
1617
expect(compareRole("developer", "owner")).toBe(false)
1718
})
1819

20+
test("manager satisfies manager and viewer, not developer or owner", () => {
21+
expect(compareRole("manager", "viewer")).toBe(true)
22+
expect(compareRole("manager", "manager")).toBe(true)
23+
expect(compareRole("manager", "developer")).toBe(false)
24+
expect(compareRole("manager", "owner")).toBe(false)
25+
})
26+
1927
test("viewer satisfies only viewer", () => {
2028
expect(compareRole("viewer", "viewer")).toBe(true)
29+
expect(compareRole("viewer", "manager")).toBe(false)
2130
expect(compareRole("viewer", "developer")).toBe(false)
2231
expect(compareRole("viewer", "owner")).toBe(false)
2332
})

apps/dashboard/server/lib/permissions.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ import { db } from "../db"
55
import { projectMembers } from "../db/schema"
66
import { auth } from "./auth"
77

8-
export type ProjectRoleName = "viewer" | "developer" | "owner"
8+
export type ProjectRoleName = "viewer" | "manager" | "developer" | "owner"
99

1010
const ROLE_RANK: Record<ProjectRoleName, number> = {
1111
viewer: 1,
12-
developer: 2,
13-
owner: 3,
12+
manager: 2,
13+
developer: 3,
14+
owner: 4,
1415
}
1516

1617
export function compareRole(actual: ProjectRoleName, min: ProjectRoleName): boolean {

0 commit comments

Comments
 (0)