init-policies.sql 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. -- 初始化 Cloudpods 基本策略数据
  2. -- 这些策略允许 sysadmin 用户执行管理操作
  3. -- 检查 policy 表是否为空
  4. SET @policy_count = (SELECT COUNT(*) FROM policy);
  5. -- 如果 policy 表为空,插入默认策略
  6. -- 注意:blob 是 MySQL 保留关键字,需要用反引号转义
  7. -- 策略格式需要包含 "policy" 键,并且规则是嵌套字典格式
  8. -- 格式: {"policy": {"service": {"resource": {"action": "result"}}}}
  9. INSERT INTO policy (id, name, type, description, `blob`, scope, domain_id, is_public, created_at, updated_at, deleted)
  10. SELECT
  11. LOWER(REPLACE(UUID(), '-', '')),
  12. 'sysadmin-system-policy',
  13. 'sysadmin-system-policy',
  14. 'System admin policy with full permissions',
  15. '{"policy":{"*":{"*":{"*":"allow"}}}}',
  16. 'system',
  17. 'default',
  18. 1,
  19. NOW(),
  20. NOW(),
  21. 0
  22. WHERE @policy_count = 0;
  23. -- 获取刚插入的策略 ID
  24. SET @policy_id = (SELECT id FROM policy WHERE name = 'sysadmin-system-policy' LIMIT 1);
  25. -- 获取 admin 角色 ID
  26. SET @admin_role_id = (SELECT id FROM role WHERE name = 'admin' LIMIT 1);
  27. -- 检查 rolepolicy_tbl 是否已有数据
  28. SET @rp_count = (SELECT COUNT(*) FROM rolepolicy_tbl);
  29. -- 如果 rolepolicy_tbl 为空且策略和角色都存在,插入关联
  30. -- rolepolicy_tbl 主键是 (role_id, project_id, policy_id),没有 id 列
  31. INSERT INTO rolepolicy_tbl (role_id, project_id, policy_id, created_at, updated_at, deleted, auth)
  32. SELECT
  33. @admin_role_id,
  34. '',
  35. @policy_id,
  36. NOW(),
  37. NOW(),
  38. 0,
  39. 1
  40. WHERE @rp_count = 0 AND @policy_id IS NOT NULL AND @admin_role_id IS NOT NULL;
  41. -- 验证插入结果
  42. SELECT 'Policy count after init:' AS info, COUNT(*) AS count FROM policy;
  43. SELECT 'RolePolicy count after init:' AS info, COUNT(*) AS count FROM rolepolicy_tbl;