forked from BRETT/BRETT
Initial Commit
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
export const PERMISSIONS = [
|
||||
{ key: 'admin.access', label: 'Admin-Bereich öffnen' },
|
||||
{ key: 'roles.manage', label: 'Rollen & Berechtigungen verwalten' },
|
||||
{ key: 'users.manage', label: 'Benutzer & Rollen verwalten' },
|
||||
{ key: 'site.manage', label: 'Seiten-Einstellungen verwalten' },
|
||||
{ key: 'comment.delete', label: 'Kommentare löschen' },
|
||||
{ key: 'upload.delete', label: 'Uploads löschen' },
|
||||
{ key: 'tag.delete', label: 'Tags löschen' },
|
||||
] as const
|
||||
|
||||
export type PermissionKey = (typeof PERMISSIONS)[number]['key']
|
||||
|
||||
export const PERMISSION_KEYS: string[] = PERMISSIONS.map(p => p.key)
|
||||
|
||||
// System-Rollen: immer vorhanden, nicht löschbar
|
||||
export const SYSTEM_ROLES = ['admin', 'moderator'] as const
|
||||
|
||||
interface Queryable {
|
||||
query: (sql: string, params?: unknown[]) => Promise<unknown>
|
||||
}
|
||||
|
||||
// Permission-Katalog idempotent einpflegen. Läuft sowohl im Nitro-Plugin
|
||||
// (Dev-Start) als auch im manuellen migrate-Script. Die bestehende
|
||||
// moderator-Rolle erhält dabei die bisherigen Moderationsrechte.
|
||||
export async function seedPermissions(db: Queryable) {
|
||||
for (const role of SYSTEM_ROLES) {
|
||||
await db.query('INSERT IGNORE INTO roles (name) VALUES (?)', [role])
|
||||
}
|
||||
for (const p of PERMISSIONS) {
|
||||
await db.query(
|
||||
'INSERT INTO permissions (`key`, `label`) VALUES (?, ?) ON DUPLICATE KEY UPDATE `label` = VALUES(`label`)',
|
||||
[p.key, p.label],
|
||||
)
|
||||
}
|
||||
await db.query(
|
||||
`INSERT IGNORE INTO role_permissions (role_id, permission_id)
|
||||
SELECT r.id, p.id FROM roles r
|
||||
JOIN permissions p ON p.\`key\` IN ('comment.delete', 'upload.delete', 'tag.delete')
|
||||
WHERE r.name = 'moderator'`,
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user