deliveryerManage1-permission.sql 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. -- Run this script in database `eduepos-plat`.
  2. -- It adds `/delivery/deliveryerManage1` under the same module as the existing
  3. -- `/delivery/deliveryerManage` menu, then copies menu/button permissions from
  4. -- the existing rider management menu.
  5. -- 1. Create menu by copying the existing rider management menu.
  6. INSERT INTO sys_menu (
  7. MODEL_CODE,
  8. MENU_NAME,
  9. URL,
  10. LEVEL,
  11. ORDER_KEY,
  12. FATHER_ID,
  13. STATUS,
  14. CREATE_DATE
  15. )
  16. SELECT
  17. old_menu.MODEL_CODE,
  18. '新配送员管理',
  19. '/delivery/deliveryerManage1',
  20. old_menu.LEVEL,
  21. old_menu.ORDER_KEY + 1,
  22. old_menu.FATHER_ID,
  23. old_menu.STATUS,
  24. NOW()
  25. FROM sys_menu old_menu
  26. WHERE old_menu.URL = '/delivery/deliveryerManage'
  27. AND NOT EXISTS (
  28. SELECT 1
  29. FROM (
  30. SELECT MENU_ID
  31. FROM sys_menu
  32. WHERE URL = '/delivery/deliveryerManage1'
  33. ) exists_menu
  34. )
  35. LIMIT 1;
  36. -- 2. Copy selectable button permissions from the existing rider management menu.
  37. INSERT INTO sys_menu_button (
  38. MENU_ID,
  39. BUTTON_CODE
  40. )
  41. SELECT
  42. new_menu.MENU_ID,
  43. old_button.BUTTON_CODE
  44. FROM sys_menu old_menu
  45. JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
  46. JOIN sys_menu_button old_button ON old_button.MENU_ID = old_menu.MENU_ID
  47. WHERE old_menu.URL = '/delivery/deliveryerManage'
  48. AND NOT EXISTS (
  49. SELECT 1
  50. FROM sys_menu_button exists_button
  51. WHERE exists_button.MENU_ID = new_menu.MENU_ID
  52. AND exists_button.BUTTON_CODE = old_button.BUTTON_CODE
  53. );
  54. -- 3. Fallback: if the existing rider menu has no button rows, create common buttons.
  55. INSERT INTO sys_menu_button (
  56. MENU_ID,
  57. BUTTON_CODE
  58. )
  59. SELECT
  60. new_menu.MENU_ID,
  61. buttons.BUTTON_CODE
  62. FROM sys_menu new_menu
  63. JOIN (
  64. SELECT 'add' AS BUTTON_CODE
  65. UNION ALL SELECT 'edit'
  66. UNION ALL SELECT 'delete'
  67. ) buttons
  68. WHERE new_menu.URL = '/delivery/deliveryerManage1'
  69. AND NOT EXISTS (
  70. SELECT 1
  71. FROM sys_menu_button exists_button
  72. WHERE exists_button.MENU_ID = new_menu.MENU_ID
  73. AND exists_button.BUTTON_CODE = buttons.BUTTON_CODE
  74. );
  75. -- 4. Grant the new menu to every role that already has the old rider management menu.
  76. INSERT INTO sys_role (
  77. CHARACTOR_ID,
  78. MENU_ID
  79. )
  80. SELECT
  81. old_role.CHARACTOR_ID,
  82. new_menu.MENU_ID
  83. FROM sys_role old_role
  84. JOIN sys_menu old_menu ON old_menu.MENU_ID = old_role.MENU_ID
  85. JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
  86. WHERE old_menu.URL = '/delivery/deliveryerManage'
  87. AND NOT EXISTS (
  88. SELECT 1
  89. FROM sys_role exists_role
  90. WHERE exists_role.CHARACTOR_ID = old_role.CHARACTOR_ID
  91. AND exists_role.MENU_ID = new_menu.MENU_ID
  92. );
  93. -- 5. Grant matching button permissions to roles copied in step 4.
  94. INSERT INTO sys_role_menu_button (
  95. MENU_ID,
  96. ROLE_ID,
  97. BUTTON_CODE
  98. )
  99. SELECT
  100. new_menu.MENU_ID,
  101. old_button_role.ROLE_ID,
  102. old_button_role.BUTTON_CODE
  103. FROM sys_role_menu_button old_button_role
  104. JOIN sys_menu old_menu ON old_menu.MENU_ID = old_button_role.MENU_ID
  105. JOIN sys_menu new_menu ON new_menu.URL = '/delivery/deliveryerManage1'
  106. JOIN sys_menu_button new_button ON new_button.MENU_ID = new_menu.MENU_ID
  107. AND new_button.BUTTON_CODE = old_button_role.BUTTON_CODE
  108. WHERE old_menu.URL = '/delivery/deliveryerManage'
  109. AND NOT EXISTS (
  110. SELECT 1
  111. FROM sys_role_menu_button exists_button_role
  112. WHERE exists_button_role.MENU_ID = new_menu.MENU_ID
  113. AND exists_button_role.ROLE_ID = old_button_role.ROLE_ID
  114. AND exists_button_role.BUTTON_CODE = old_button_role.BUTTON_CODE
  115. );
  116. -- 6. Verify.
  117. SELECT
  118. m.MENU_ID,
  119. m.MENU_NAME,
  120. m.URL,
  121. m.MODEL_CODE,
  122. m.ORDER_KEY,
  123. b.BUTTON_CODE,
  124. r.CHARACTOR_ID
  125. FROM sys_menu m
  126. LEFT JOIN sys_menu_button b ON b.MENU_ID = m.MENU_ID
  127. LEFT JOIN sys_role r ON r.MENU_ID = m.MENU_ID
  128. WHERE m.URL IN ('/delivery/deliveryerManage', '/delivery/deliveryerManage1')
  129. ORDER BY m.URL, b.BUTTON_CODE, r.CHARACTOR_ID;