nice
unknown
typescript
10 months ago
702 B
6
Indexable
export type User = { roles: Role[]; id: string }
type Role = keyof typeof ROLES
type Permission = (typeof ROLES)[Role][number]
const ROLES = {
admin: [
"view:comments",
"create:comments",
"update:comments",
"delete:comments",
],
moderator: ["view:comments", "create:comments", "delete:comments"],
user: ["view:comments", "create:comments"],
} as const
export function hasPermission(user: User, permission: Permission) {
return user.roles.some(role =>
(ROLES[role] as readonly Permission[]).includes(permission)
)
}
const user: User = { id: "1", roles: ["user"] }
hasPermission(user, "create:comments")
hasPermission(user, "view:comments")Editor is loading...
Leave a Comment