109 lines
4.4 KiB
SQL
109 lines
4.4 KiB
SQL
CREATE TABLE organizations (
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
code VARCHAR(50) NOT NULL,
|
|
name VARCHAR(200) NOT NULL,
|
|
status VARCHAR(20) NOT NULL DEFAULT 'active',
|
|
default_timezone VARCHAR(64) NOT NULL DEFAULT 'Asia/Shanghai',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_organizations_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
INSERT INTO organizations (id, code, name, status)
|
|
VALUES (1, 'DEFAULT', '默认公司组织', 'active');
|
|
|
|
CREATE TABLE roles (
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
code VARCHAR(80) NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
enabled BOOLEAN NOT NULL DEFAULT TRUE,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_roles_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE permissions (
|
|
id BIGINT NOT NULL AUTO_INCREMENT,
|
|
code VARCHAR(120) NOT NULL,
|
|
name VARCHAR(150) NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (id),
|
|
UNIQUE KEY uk_permissions_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE role_permissions (
|
|
role_id BIGINT NOT NULL,
|
|
permission_id BIGINT NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (role_id, permission_id),
|
|
CONSTRAINT fk_role_permissions_role FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_role_permissions_permission FOREIGN KEY (permission_id) REFERENCES permissions(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE user_roles (
|
|
user_id BIGINT NOT NULL,
|
|
role_id BIGINT NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (user_id, role_id),
|
|
CONSTRAINT fk_user_roles_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_user_roles_role FOREIGN KEY (role_id) REFERENCES roles(id) ON DELETE RESTRICT
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE user_organizations (
|
|
user_id BIGINT NOT NULL,
|
|
organization_id BIGINT NOT NULL,
|
|
is_default BOOLEAN NOT NULL DEFAULT FALSE,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (user_id, organization_id),
|
|
CONSTRAINT fk_user_organizations_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE,
|
|
CONSTRAINT fk_user_organizations_org FOREIGN KEY (organization_id) REFERENCES organizations(id) ON DELETE RESTRICT
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
CREATE TABLE revoked_tokens (
|
|
jti VARCHAR(64) NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
expires_at DATETIME NOT NULL,
|
|
revoked_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (jti),
|
|
KEY idx_revoked_tokens_expires_at (expires_at),
|
|
CONSTRAINT fk_revoked_tokens_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
|
|
|
INSERT INTO roles (code, name) VALUES
|
|
('super_admin', '超级管理员'),
|
|
('warehouse_admin', '仓库管理员'),
|
|
('purchaser', '采购人员'),
|
|
('technician', '技术人员'),
|
|
('production', '生产人员'),
|
|
('sales', '销售人员');
|
|
|
|
INSERT INTO permissions (code, name) VALUES
|
|
('master.material.read', '查看物料'),
|
|
('master.material.write', '维护物料'),
|
|
('master.config.write', '维护物料基础配置'),
|
|
('organization.read', '查看公司组织'),
|
|
('organization.write', '维护公司组织'),
|
|
('organization.user.write', '维护用户'),
|
|
('organization.role.write', '维护角色与权限'),
|
|
('partner.supplier.read', '查看供应商'),
|
|
('partner.supplier.write', '维护供应商'),
|
|
('partner.customer.read', '查看客户'),
|
|
('partner.customer.write', '维护客户'),
|
|
('inventory.stock.read', '查看库存'),
|
|
('inventory.warning.write', '维护库存预警'),
|
|
('inventory.inbound.write', '维护入库'),
|
|
('inventory.outbound.write', '维护出库');
|
|
|
|
INSERT INTO role_permissions (role_id, permission_id)
|
|
SELECT r.id, p.id FROM roles r CROSS JOIN permissions p WHERE r.code = 'super_admin';
|
|
|
|
INSERT INTO user_organizations (user_id, organization_id, is_default)
|
|
SELECT id, 1, TRUE FROM users;
|
|
|
|
INSERT INTO user_roles (user_id, role_id)
|
|
SELECT u.id, r.id
|
|
FROM users u
|
|
JOIN roles r ON r.code = CASE WHEN u.role = 'admin' THEN 'super_admin' ELSE 'warehouse_admin' END;
|