feat: add god-mode API and auto-permissions - SECURE TOKEN IN COOLIFY ENV ONLY

This commit is contained in:
cawcenter
2025-12-14 11:13:34 -05:00
parent 6d9209553e
commit f9947e81af
8 changed files with 692 additions and 1 deletions

View File

@@ -0,0 +1,77 @@
/**
* Auto-Permissions Hook
* Automatically grants all permissions to admin policy on startup
*/
export default ({ init }, { services, database, logger }) => {
// Run after Directus initialization
init('app.after', async () => {
try {
logger.info('Auto-permissions: Granting all permissions to admin policy');
// Get admin policy
const [policy] = await database('directus_policies')
.where('name', 'Administrator')
.select('id');
if (!policy) {
logger.warn('Auto-permissions: Admin policy not found');
return;
}
// Get all custom collections
const collections = await database('directus_collections')
.whereNotLike('collection', 'directus_%')
.select('collection');
if (collections.length === 0) {
logger.info('Auto-permissions: No custom collections found');
return;
}
// Check if permissions already exist
const existing = await database('directus_permissions')
.where('policy', policy.id)
.count('* as count')
.first();
const expectedCount = collections.length * 4; // 4 actions per collection
if (parseInt(existing.count) >= expectedCount) {
logger.info('Auto-permissions: Permissions already granted');
return;
}
// Delete old permissions
await database('directus_permissions')
.where('policy', policy.id)
.delete();
// Grant new permissions
const permissions = [];
const actions = ['create', 'read', 'update', 'delete'];
for (const { collection } of collections) {
for (const action of actions) {
permissions.push({
policy: policy.id,
collection,
action,
permissions: null,
validation: null,
presets: null,
fields: ['*']
});
}
}
await database('directus_permissions').insert(permissions);
logger.info(`Auto-permissions: Granted ${permissions.length} permissions for ${collections.length} collections`);
} catch (error) {
logger.error('Auto-permissions failed:', error);
}
});
};