- 순찰/점검 기능 개선 (zone-detail 페이지 추가) - 출근/근태 시스템 개선 (연차 조회, 근무현황) - 작업분석 대분류 그룹화 및 마이그레이션 스크립트 - 모바일 네비게이션 UI 추가 - NAS 배포 도구 및 문서 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
57 lines
2.4 KiB
JavaScript
57 lines
2.4 KiB
JavaScript
/**
|
|
* @param { import("knex").Knex } knex
|
|
* @returns { Promise<void> }
|
|
*/
|
|
exports.up = function(knex) {
|
|
return knex.schema
|
|
// 1. roles 테이블 생성
|
|
.createTable('roles', function(table) {
|
|
table.increments('id').primary();
|
|
table.string('name', 50).notNullable().unique();
|
|
table.string('description', 255);
|
|
table.timestamps(true, true);
|
|
})
|
|
// 2. permissions 테이블 생성
|
|
.createTable('permissions', function(table) {
|
|
table.increments('id').primary();
|
|
table.string('name', 100).notNullable().unique(); // 예: 'user:create'
|
|
table.string('description', 255);
|
|
table.timestamps(true, true);
|
|
})
|
|
// 3. role_permissions (역할-권한) 조인 테이블 생성
|
|
.createTable('role_permissions', function(table) {
|
|
table.integer('role_id').unsigned().notNullable().references('id').inTable('roles').onDelete('CASCADE');
|
|
table.integer('permission_id').unsigned().notNullable().references('id').inTable('permissions').onDelete('CASCADE');
|
|
table.primary(['role_id', 'permission_id']);
|
|
})
|
|
// 4. users 테이블에 role_id 추가 및 기존 컬럼 삭제
|
|
.table('users', function(table) {
|
|
table.integer('role_id').unsigned().references('id').inTable('roles').onDelete('SET NULL').after('email');
|
|
// 기존 컬럼들은 삭제 또는 비활성화 (데이터 보존을 위해 일단 이름 변경)
|
|
table.renameColumn('role', '_role_old');
|
|
table.renameColumn('access_level', '_access_level_old');
|
|
})
|
|
// 5. user_permissions (사용자-개별 권한) 조인 테이블 생성
|
|
.createTable('user_permissions', function(table) {
|
|
table.integer('user_id').notNullable().references('user_id').inTable('users').onDelete('CASCADE');
|
|
table.integer('permission_id').unsigned().notNullable().references('id').inTable('permissions').onDelete('CASCADE');
|
|
table.primary(['user_id', 'permission_id']);
|
|
});
|
|
};
|
|
|
|
/**
|
|
* @param { import("knex").Knex } knex
|
|
* @returns { Promise<void> }
|
|
*/
|
|
exports.down = function(knex) {
|
|
return knex.schema
|
|
.dropTableIfExists('user_permissions')
|
|
.dropTableIfExists('role_permissions')
|
|
.dropTableIfExists('permissions')
|
|
.dropTableIfExists('roles')
|
|
.table('users', function(table) {
|
|
table.dropColumn('role_id');
|
|
table.renameColumn('_role_old', 'role');
|
|
table.renameColumn('_access_level_old', 'access_level');
|
|
});
|
|
}; |