diff --git a/doc/pdm/micai-platform.pdm b/doc/pdm/micai-platform.pdm index ae83c8fbcdb13ee0f19e38f1fd3d2233078ab9b1..5ba10449f4c942c45112643019e8662019989786 100644 --- a/doc/pdm/micai-platform.pdm +++ b/doc/pdm/micai-platform.pdm @@ -1,5 +1,5 @@ - + @@ -4121,9 +4121,9 @@ Shadow=0 1638875492 -1638875671 -((-28436,-2680), (-27186,5746)) -((-27811,-2280),(-27811,5346)) +1642129056 +((-27887,-2680), (-26637,4366)) +((-27262,-2280),(-27262,3966)) 1 1 12615680 @@ -4143,9 +4143,9 @@ DESTINATION 0 新宋体,8,N 1638875671 -1638875796 -((-17938,-2560), (-16688,5746)) -((-17313,5346),(-17313,-2160)) +1642129056 +((-21913,-2560), (-20663,4366)) +((-21288,3966),(-21288,-2160)) 1 1 12615680 @@ -4165,9 +4165,9 @@ DESTINATION 0 新宋体,8,N 1638875941 -1638876026 -((-7386,-7809), (-3938,5864)) -((-6986,-7409),(-4563,-7409),(-4563,5464)) +1642129051 +((-8211,-2560), (-6961,4334)) +((-7586,-2160),(-7586,3934)) 1 1 12615680 @@ -4187,9 +4187,9 @@ DESTINATION 0 新宋体,8,N 1638875943 -1638876800 -((-1476,-2020), (-226,5864)) -((-851,5464),(-851,-1620)) +1642129051 +((-3268,-2020), (-2018,4334)) +((-2643,3934),(-2643,-1620)) 1 1 12615680 @@ -4209,9 +4209,9 @@ DESTINATION 0 新宋体,8,N 1638876100 -1638876829 -((11661,-7269), (13830,7034)) -((12061,-6869),(13205,-6869),(13205,6634)) +1642129049 +((11661,-7269), (16440,3884)) +((12061,-6869),(15815,-6869),(15815,3484)) 1 1 12615680 @@ -4232,9 +4232,9 @@ DESTINATION 0 新宋体,8,N 1638876103 -1638876145 -((18682,-827), (19932,7034)) -((19307,6634),(19307,-427)) +1642129049 +((18410,-827), (19660,3884)) +((19035,3484),(19035,-427)) 1 1 12615680 @@ -4254,9 +4254,9 @@ DESTINATION 0 新宋体,8,N 1638876260 -1638876261 -((-49004,-1005), (-47754,5294)) -((-48379,-605),(-48379,4894)) +1642129058 +((-48423,-1005), (-47173,3884)) +((-47798,-605),(-47798,3484)) 1 1 12615680 @@ -4276,9 +4276,9 @@ DESTINATION 0 新宋体,8,N 1638876261 -1638876261 -((-41507,-2680), (-40257,5294)) -((-40882,4894),(-40882,-2280)) +1642129058 +((-41589,-2680), (-40339,3884)) +((-40964,3484),(-40964,-2280)) 1 1 12615680 @@ -4343,9 +4343,9 @@ LABL 0 新宋体,8,N -1638876261 +1642129058 -1 -((-49758,4894), (-35660,9992)) +((-48736,3484), (-35842,11282)) 12615680 16570034 12632256 @@ -4391,9 +4391,9 @@ LABL 0 新宋体,8,N -1638876144 +1642129049 -1 -((6156,6634), (20254,11732)) +((9368,3484), (22262,11282)) 12615680 16570034 12632256 @@ -4439,9 +4439,9 @@ LABL 0 新宋体,8,N -1638876026 +1642129051 -1 -((-11612,5464), (2486,10562)) +((-10410,3934), (2484,11732)) 12615680 16570034 12632256 @@ -4511,9 +4511,9 @@ LABL 0 新宋体,8,N -1638875671 +1642129056 -1 -((-30290,5346), (-16592,10444)) +((-29528,3966), (-16634,11764)) 12615680 16570034 12632256 @@ -4769,38 +4769,49 @@ LABL 0 新宋体,8,N tb_organ_user 1638866782 liucong -1638876312 +1642128841 liucong ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic +99D8FF0B-2324-4D85-8132-CC98A10E6240 +id +id +1638866782 +liucong +1642128859 +liucong +主键id +bigint(20) +20 +1 + + D2DBD86A-A077-4E45-B9DD-51ED296FF736 organ_id organ_id 1638866782 liucong -1638876294 +1642128909 liucong 组织机构id bigint(20) 20 -1 - + 40401F94-C6A3-49B4-904A-3E46D3CC0AA0 user_id user_id 1638866782 liucong -1638876312 +1642128986 liucong 用户id bigint(20) 20 -1 - + 21335764-D6BC-4D41-A3E2-8D2400D38CBF create_user_id create_user_id @@ -4813,7 +4824,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 6FF936EC-0DF2-4E09-82B3-3A92BB058AAD create_time create_time @@ -4823,24 +4834,46 @@ LABL 0 新宋体,8,N liucong datetime + +53659533-8DD4-497B-84E5-52E880321000 +update_user_id +update_user_id +1638866782 +liucong +1642128733 +liucong +修改人 +NULL +bigint(20) +20 + + +F666CFA1-E71F-4571-81D3-1F5EAFECDB7E +update_time +update_time +1638866782 +liucong +1642128733 +liucong +datetime + - + CF89A5E4-6159-4042-85F1-9F486176B40D Key_1 Key_1 1638866782 liucong -1638876294 +1642128986 liucong - - + @@ -4854,7 +4887,7 @@ LABL 0 新宋体,8,N ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + 70DA1190-E655-483C-AFE0-BC457E083AA8 id id @@ -4867,7 +4900,7 @@ LABL 0 新宋体,8,N 20 1 - + 2CD47A70-33E2-4526-BC82-BEC2348DD952 permission_code permission_code @@ -4878,7 +4911,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + FA637CE5-4D7A-4951-967E-E0416425C162 permission_name permission_name @@ -4889,7 +4922,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + 45578A2E-4D4C-4A8A-8B83-F8955ECAC1A0 description description @@ -4900,7 +4933,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + 4CD43820-E569-4E80-8006-FAE243484C46 status status @@ -4911,7 +4944,7 @@ LABL 0 新宋体,8,N char(2) 2 - + AA4D532D-1E4B-496B-B9BD-0B0CFBE9931E create_user_id create_user_id @@ -4924,7 +4957,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 9A23DB00-BDFE-44D7-B9C4-64BA6BF08123 create_time create_time @@ -4934,7 +4967,7 @@ LABL 0 新宋体,8,N liucong datetime - + 8C3EBB9F-5BD0-4F34-9F1D-AF20A0BB5EA7 update_user_id update_user_id @@ -4947,7 +4980,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 64CEECA9-F3D1-4717-819F-0B6AB987FA41 update_time update_time @@ -4957,7 +4990,7 @@ LABL 0 新宋体,8,N liucong datetime - + 53129E00-6568-49DB-9A4A-862D5FDF709D version version @@ -4972,7 +5005,7 @@ LABL 0 新宋体,8,N - + 7DA4484A-81E4-49FD-87B4-5CF1967873DB Key_1 Key_1 @@ -4981,12 +5014,12 @@ LABL 0 新宋体,8,N 1638876022 liucong - + - + @@ -4995,38 +5028,49 @@ LABL 0 新宋体,8,N tb_permission_menu 1638866782 liucong -1638876224 +1642129041 liucong ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + +CC9694FA-77B5-48E0-8AED-109C9171AB38 +id +id +1638866782 +liucong +1642129041 +liucong +主键id +bigint(20) +20 +1 + + 7EBAD130-DF1B-4E89-911B-47D7FFE5A6CE permission_id permission_id 1638866782 liucong -1638876195 +1642129041 liucong 权限id bigint(20) 20 -1 - + BA53370D-A737-4FED-80D3-22F4892540E2 menu_id menu_id 1638866782 liucong -1638876224 +1642129041 liucong 菜单id bigint(20) 20 -1 - + F82F08C4-3080-42A8-84E5-CF808B3EFEDE create_user_id create_user_id @@ -5039,7 +5083,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + FC077D19-0668-452C-80AA-163692ECA50F create_time create_time @@ -5049,24 +5093,46 @@ LABL 0 新宋体,8,N liucong datetime + +9686470D-1D9C-4EC4-85A2-B8387E093768 +update_user_id +update_user_id +1638866782 +liucong +1642128780 +liucong +修改人 +NULL +bigint(20) +20 + + +EB40EC63-0790-451D-B358-5C795CADDA40 +update_time +update_time +1638866782 +liucong +1642128780 +liucong +datetime + - + DE6804E0-AB4E-4DC1-84BD-FDDC83B91430 Key_1 Key_1 1638866782 liucong -1638876138 +1642129041 liucong - - + - + @@ -5080,7 +5146,7 @@ LABL 0 新宋体,8,N ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + 2B0910B5-0136-4F84-82DE-9B9F69A5D29A id id @@ -5093,7 +5159,7 @@ LABL 0 新宋体,8,N 20 1 - + FE75F945-9770-4DD4-8420-C45226DB317D role_code role_code @@ -5104,7 +5170,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + 2BD8D48A-25E5-468D-93AD-04DA9C7A9FE2 role_name role_name @@ -5115,7 +5181,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + 3B3425B6-474E-48EA-AEBB-04694D925824 description description @@ -5126,7 +5192,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + EA05F66E-41BE-49CB-A065-C9202379CCCD status status @@ -5137,7 +5203,7 @@ LABL 0 新宋体,8,N char(2) 2 - + 77C15EC8-4CFA-4DBA-B5B2-AF8727F363FF create_user_id create_user_id @@ -5150,7 +5216,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 7B559F5B-66E0-4760-A29C-BF90ACCDBE38 create_time create_time @@ -5160,7 +5226,7 @@ LABL 0 新宋体,8,N liucong datetime - + 5F1DA8BC-6814-4C92-B3F3-C9D3BFB74239 update_user_id update_user_id @@ -5173,7 +5239,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + A8009A19-7C4A-472A-AD46-922C0ADBC67E update_time update_time @@ -5183,7 +5249,7 @@ LABL 0 新宋体,8,N liucong datetime - + F9FB7379-23A1-4A45-8937-A05145122BA1 version version @@ -5198,7 +5264,7 @@ LABL 0 新宋体,8,N - + 103BA720-E3DA-4C41-B710-EEF4297DD38E Key_1 Key_1 @@ -5207,12 +5273,12 @@ LABL 0 新宋体,8,N 1638866782 liucong - + - + @@ -5221,38 +5287,49 @@ LABL 0 新宋体,8,N tb_role_permission 1638866782 liucong -1638876022 +1642129020 liucong ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + +65FFF82A-652D-45FE-A63B-0B0F990AE7E2 +id +id +1638866782 +liucong +1642129020 +liucong +主键id +bigint(20) +20 +1 + + 6811FE76-9A10-4314-B5E2-236E6F68FFE7 role_id role_id 1638866782 liucong -1638875999 +1642129020 liucong 角色id bigint(20) 20 -1 - + EE778B42-E2FA-4F20-B9EC-001E16EBBCC8 permission_id permission_id 1638866782 liucong -1638876022 +1642129020 liucong 权限id bigint(20) 20 -1 - + ACDFA404-F315-43BB-81EF-24A486A38599 create_user_id create_user_id @@ -5265,7 +5342,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 42EAC9A1-3690-4DD0-942E-E957D115B5F2 create_time create_time @@ -5275,24 +5352,46 @@ LABL 0 新宋体,8,N liucong datetime + +7A1C73EA-6B9F-408E-A59A-582707E1EE5A +update_user_id +update_user_id +1638866782 +liucong +1642128770 +liucong +修改人 +NULL +bigint(20) +20 + + +E82CEC56-ADE7-4EF4-B7E6-F47062810CDA +update_time +update_time +1638866782 +liucong +1642128770 +liucong +datetime + - + E9B3C493-86AC-4453-9D97-413215C50CD6 Key_1 Key_1 1638866782 liucong -1638875978 +1642129020 liucong - - + - + @@ -5306,7 +5405,7 @@ LABL 0 新宋体,8,N ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + 7926474F-16B0-4C76-AB4D-0DBA3E6A960D id id @@ -5320,7 +5419,7 @@ LABL 0 新宋体,8,N 1 1 - + 3618400C-23DD-4B5C-A859-7FB419C7F56E menu_code menu_code @@ -5331,7 +5430,7 @@ LABL 0 新宋体,8,N varchar(20) 20 - + 3D63A7DB-8F8A-4278-A6EF-AA4DBC9D94EE menu_name menu_name @@ -5342,7 +5441,7 @@ LABL 0 新宋体,8,N varchar(50) 50 - + B9C00E7F-807A-4D8A-97DE-1347C145E4D9 system_code system_code @@ -5353,7 +5452,7 @@ LABL 0 新宋体,8,N varchar(50) 50 - + 529D78E9-C99E-4224-BE6F-FEA061EAD3B8 system_name system_name @@ -5364,7 +5463,7 @@ LABL 0 新宋体,8,N varchar(50) 50 - + 671D55D1-A94B-4AA0-974D-D887515FB8FA application application @@ -5375,7 +5474,7 @@ LABL 0 新宋体,8,N char(2) 2 - + 17533F0E-8401-4CB6-8CFE-AAB049127858 parent_code parent_code @@ -5386,7 +5485,7 @@ LABL 0 新宋体,8,N varchar(20) 20 - + 1B61C65B-DEC4-4B3A-A0AE-5BC1AB443FE2 menu_icon menu_icon @@ -5397,7 +5496,7 @@ LABL 0 新宋体,8,N varchar(200) 200 - + 026E4784-6A8F-4667-B73D-2A8CE8D3D96E url url @@ -5408,7 +5507,7 @@ LABL 0 新宋体,8,N varchar(200) 200 - + 7846E91B-7BAC-4568-9C7C-85725F71F9DA open_type open_type @@ -5419,7 +5518,7 @@ LABL 0 新宋体,8,N char(1) 1 - + 478D0E81-DCBE-4D99-9A7B-30435EC9F82E sn sn @@ -5432,7 +5531,7 @@ LABL 0 新宋体,8,N int(4) 4 - + EDED683D-98F7-4737-A664-46447F859C39 create_time create_time @@ -5442,7 +5541,7 @@ LABL 0 新宋体,8,N liucong datetime - + 51D809DF-AE97-45AB-83B7-D561ADC4127E create_user_id create_user_id @@ -5455,7 +5554,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + CD09D647-0087-4FD2-8A51-B34C3BF9D3E9 update_user_id update_user_id @@ -5468,7 +5567,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 6E816392-21DD-4BFC-8423-7FE0F447E77F update_time update_time @@ -5478,7 +5577,7 @@ LABL 0 新宋体,8,N liucong datetime - + 6AFEBC80-F976-4520-82DE-8D3E55B52F0B status status @@ -5489,7 +5588,7 @@ LABL 0 新宋体,8,N char(2) 2 - + 27BD3B91-9602-4ABC-9C0D-FBE197F1E224 version version @@ -5504,7 +5603,7 @@ LABL 0 新宋体,8,N - + D9DA9F3D-D4FD-4B9A-8CAC-F15C5E8F86E4 Key_1 Key_1 @@ -5513,12 +5612,12 @@ LABL 0 新宋体,8,N 1638876224 liucong - + - + @@ -5538,7 +5637,7 @@ LABL 0 新宋体,8,N } - + 3451034F-DF96-4CE7-A7ED-2C66B2C7EEF4 id id @@ -5551,7 +5650,7 @@ LABL 0 新宋体,8,N 20 1 - + 76127B17-C66B-4573-9B90-D29A8BB296E4 username username @@ -5565,7 +5664,7 @@ LABL 0 新宋体,8,N - + 73FC6A32-222C-4203-B6AE-C783E28B8175 password password @@ -5579,7 +5678,7 @@ LABL 0 新宋体,8,N - + E9EDF442-44D5-481C-AB33-EC43855007EF phone phone @@ -5593,7 +5692,7 @@ LABL 0 新宋体,8,N - + D781AC7F-5851-4CFB-9775-893B38798469 email email @@ -5607,7 +5706,7 @@ LABL 0 新宋体,8,N - + 803B27C9-A8CE-49B7-94E8-5DBF47D191D3 create_user_id create_user_id @@ -5620,7 +5719,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 9CA21D0C-C95D-492D-B6A3-481507304CB7 create_time create_time @@ -5630,7 +5729,7 @@ LABL 0 新宋体,8,N liucong datetime - + BC3BD5A6-E7A8-4F72-B1C1-2BD12F592EFF update_user_id update_user_id @@ -5643,7 +5742,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 100CAA81-175C-4FD3-8866-BF202E23DD14 status status @@ -5657,7 +5756,7 @@ LABL 0 新宋体,8,N - + 9104BE9A-2DFF-4434-ADEA-3ACF5FD36F04 version version @@ -5672,7 +5771,7 @@ LABL 0 新宋体,8,N - + BD032096-41FB-47A5-B085-CA86EE457712 Key_1 Key_1 @@ -5681,12 +5780,12 @@ LABL 0 新宋体,8,N 1638876312 liucong - + - + @@ -5695,37 +5794,48 @@ LABL 0 新宋体,8,N tb_user_role 1638866782 liucong -1638876069 +1642129003 liucong 用户角色表 ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + +A2ECEE61-0435-424A-B9EB-6E1475BA7532 +id +id +1638866782 +liucong +1642129003 +liucong +主键id +bigint(20) +20 +1 + + 28D6FAB5-14B1-4F48-8335-9FACEB928DC6 user_id user_id 1638866782 liucong -1638875563 +1642129003 liucong bigint(20) 20 -1 - + 524A05F7-B689-40CA-B799-F62727AD0CFE role_id role_id 1638866782 liucong -1638876069 +1642129003 liucong bigint(20) 20 -1 - + 0EA3B50B-25DA-4B99-A2E5-CF57F3885969 creat_user_id creat_user_id @@ -5737,7 +5847,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + E0F5BE23-32FE-4DD8-A6FD-EBB069A26F51 create_time create_time @@ -5747,24 +5857,46 @@ LABL 0 新宋体,8,N liucong datetime + +03DEC01D-3716-4FD5-8BBF-E6521F12A7ED +update_user_id +update_user_id +1638866782 +liucong +1642128749 +liucong +修改人 +NULL +bigint(20) +20 + + +9D39067C-355B-4A7C-BF19-FE22443C95F3 +update_time +update_time +1638866782 +liucong +1642128749 +liucong +datetime + - + 2A2D249B-E100-4503-8D43-9DDE68EECAE4 Key_1 Key_1 1638866782 liucong -1638876069 +1642129003 liucong - - + - + @@ -5778,7 +5910,7 @@ LABL 0 新宋体,8,N ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + 2C005860-66BB-4B48-9C5B-79855B723654 id id @@ -5791,7 +5923,7 @@ LABL 0 新宋体,8,N 20 1 - + 8DA62DDE-E35C-457B-9DF5-5B41E4CC4F56 dict_name dict_name @@ -5802,7 +5934,7 @@ LABL 0 新宋体,8,N varchar(32) 32 - + 1E62E57A-A5E2-4E3D-977D-42395CF4AA26 dict_code dict_code @@ -5813,7 +5945,7 @@ LABL 0 新宋体,8,N varchar(32) 32 - + 9F1E3132-93C2-440E-AEA9-814D3C6BA9DB create_user_id create_user_id @@ -5826,7 +5958,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + F20F10CD-06CD-4B7E-86FC-F89FD6596576 create_time create_time @@ -5836,7 +5968,7 @@ LABL 0 新宋体,8,N liucong datetime - + F47C86AB-98A7-43A2-AE56-C56863D9B995 update_user_id update_user_id @@ -5849,7 +5981,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + 309829AC-632C-4814-91D7-63AB170FA24A update_time update_time @@ -5859,7 +5991,7 @@ LABL 0 新宋体,8,N liucong datetime - + FD6DDD35-9792-427A-B89F-9818291223F5 status status @@ -5870,7 +6002,7 @@ LABL 0 新宋体,8,N char(2) 2 - + 802DC29B-5E36-4F6B-A368-2B75F984657F version version @@ -5885,7 +6017,7 @@ LABL 0 新宋体,8,N - + 5FC4FA35-D231-4E78-A83D-A3053253B371 Key_1 Key_1 @@ -5894,12 +6026,12 @@ LABL 0 新宋体,8,N 1639122307 liucong - + - + @@ -5913,7 +6045,7 @@ LABL 0 新宋体,8,N ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic - + 87026EFA-9B90-47A2-BA30-A9634A1234F2 id id @@ -5926,7 +6058,7 @@ LABL 0 新宋体,8,N 20 1 - + 34C4FDE2-CC87-439C-83AA-C82F5E8B13C0 dict_id dict_id @@ -5939,7 +6071,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + C1792505-14B0-4426-8073-5C90F61BCC3F item_text item_text @@ -5950,7 +6082,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + DC8BAE6E-4972-460C-A57E-18524312E0EC item_value item_value @@ -5961,7 +6093,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + 9FF5DAE1-16E2-4D81-8231-049AF3BE13F9 description description @@ -5972,7 +6104,7 @@ LABL 0 新宋体,8,N varchar(255) 255 - + F3CDFD6C-D41F-4860-B229-AC96B2AE681D sn sn @@ -5985,7 +6117,7 @@ LABL 0 新宋体,8,N int(4) 4 - + D5B83753-4261-4751-8FA4-771EB761B793 create_user_id create_user_id @@ -5998,7 +6130,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + F39F6164-D672-402C-9A53-F939C27E36EF create_time create_time @@ -6008,7 +6140,7 @@ LABL 0 新宋体,8,N liucong datetime - + EE53C581-991E-4D8D-BEDA-2AF89785546F update_user_id update_user_id @@ -6021,7 +6153,7 @@ LABL 0 新宋体,8,N bigint(20) 20 - + F59FC3F5-0339-4DF4-AB5F-2116F43FE2AC update_time update_time @@ -6031,7 +6163,7 @@ LABL 0 新宋体,8,N liucong datetime - + AC1C5E90-4F93-4542-81B7-0665248BF6E5 status status @@ -6042,7 +6174,7 @@ LABL 0 新宋体,8,N char(2) 2 - + 5B11617C-ECA0-451C-ACC1-05EF9C782B8E version version @@ -6057,7 +6189,7 @@ LABL 0 新宋体,8,N - + C9EFFE52-FD7B-4816-B1FA-965B36040191 Key_1 Key_1 @@ -6066,12 +6198,12 @@ LABL 0 新宋体,8,N 1639122664 liucong - + - + @@ -6094,17 +6226,17 @@ LABL 0 新宋体,8,N - + CEB70CC0-C816-400E-809B-2E082B7BB252 1638875551 liucong 1638876069 liucong - + - + @@ -6127,20 +6259,20 @@ LABL 0 新宋体,8,N - + - + EA3B3E44-305F-44A2-8BA3-5D3146CADD8D 1638875671 liucong 1638875697 liucong - + - + @@ -6163,17 +6295,17 @@ LABL 0 新宋体,8,N - + 1EB490D4-684F-4DAB-A1EB-5F3E0D6D70E0 1638875941 liucong 1638875999 liucong - + - + @@ -6196,17 +6328,17 @@ LABL 0 新宋体,8,N - + B20CF1A5-8FF0-489B-99D2-E14A8F091535 1638875943 liucong 1638876022 liucong - + - + @@ -6229,17 +6361,17 @@ LABL 0 新宋体,8,N - + 8E1A0D33-C0A2-4A86-8C64-CE981ADC6B7C 1638876100 liucong 1638876195 liucong - + - + @@ -6262,17 +6394,17 @@ LABL 0 新宋体,8,N - + DB91845C-E0A9-4AA9-A7E7-DFD62F6DBD39 1638876103 liucong 1638876224 liucong - + - + @@ -6295,14 +6427,14 @@ LABL 0 新宋体,8,N - + 60986195-2494-4212-A867-901386B36285 1638876260 liucong 1638876294 liucong - + @@ -6328,17 +6460,17 @@ LABL 0 新宋体,8,N - + B3217C32-E8F9-43C9-965E-DC53EB01824E 1638876261 liucong 1638876312 liucong - + - + @@ -6364,24 +6496,24 @@ LABL 0 新宋体,8,N - + 2CDF6BBC-1F6F-42C8-B40F-5322CB2F97B3 1639122362 liucong 1639122664 liucong - + - + - + ECEFC35D-E375-4FA1-B68A-92A1996BC6F6 PUBLIC PUBLIC @@ -6392,7 +6524,7 @@ LABL 0 新宋体,8,N - + 56F71CEC-8724-46F7-ABF8-90423B899853 MySQL 5.0 MYSQL50 diff --git a/doc/sql/micai_platform.sql b/doc/sql/micai_platform.sql index e9aecd74dae03f70b26d828108f272285faf6bdc..215744192cd6db5d1ff694643163483c6f997f66 100644 --- a/doc/sql/micai_platform.sql +++ b/doc/sql/micai_platform.sql @@ -11,7 +11,7 @@ Target Server Version : 50736 File Encoding : 65001 - Date: 11/12/2021 18:24:40 + Date: 14/01/2022 10:44:34 */ SET NAMES utf8mb4; @@ -46,12 +46,16 @@ CREATE TABLE `tb_organ_info` ( -- ---------------------------- DROP TABLE IF EXISTS `tb_organ_user`; CREATE TABLE `tb_organ_user` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, `organ_id` bigint(20) NOT NULL COMMENT '组织机构id', `user_id` bigint(20) NOT NULL COMMENT '用户id', `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`organ_id`, `user_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + `update_user_id` bigint(20) NULL DEFAULT NULL COMMENT '修改用户id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `version` bigint(20) NOT NULL DEFAULT 0 COMMENT '版本号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_organ_user @@ -73,44 +77,71 @@ CREATE TABLE `tb_permission` ( `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', `version` bigint(20) NULL DEFAULT 0 COMMENT '版本', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 27 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_permission -- ---------------------------- -INSERT INTO `tb_permission` VALUES (1, 'root', '最高权限', '最高权限', '01', NULL, '2021-12-04 14:15:33', NULL, '2021-12-04 14:15:37', 1); -INSERT INTO `tb_permission` VALUES (2, 'ave', '一般', '一般', '01', NULL, '2021-12-04 16:15:11', NULL, '2021-12-04 16:15:15', 1); +INSERT INTO `tb_permission` VALUES (1, 'sys:permission:save', '新增权限', '新增权限', '01', 1, '2022-01-13 12:58:32', 1, '2022-01-13 12:58:32', 0); +INSERT INTO `tb_permission` VALUES (2, 'sys:user:List', '获取用户列表', '获取用户列表', '01', 1, '2022-01-13 13:41:09', 1, '2022-01-13 13:41:09', 0); +INSERT INTO `tb_permission` VALUES (3, 'sys:user:update', '更新用户', '更新用户', '01', 1, '2022-01-13 13:43:59', 1, '2022-01-13 13:43:59', 0); +INSERT INTO `tb_permission` VALUES (4, 'sys:user:save', '新增用户', '新增用户', '01', 1, '2022-01-13 13:44:28', 1, '2022-01-13 13:44:28', 0); +INSERT INTO `tb_permission` VALUES (5, 'sys:user:del', '删除用户', '删除用户', '01', 1, '2022-01-13 13:44:46', 1, '2022-01-13 13:44:46', 0); +INSERT INTO `tb_permission` VALUES (6, 'sys:sysMenu:list', '查询菜单', '查询菜单', '01', 1, '2022-01-13 13:45:18', 1, '2022-01-13 13:45:18', 0); +INSERT INTO `tb_permission` VALUES (7, 'sys:sysMenu:update', '更新菜单', '更新菜单', '01', 1, '2022-01-13 13:45:50', 1, '2022-01-13 13:45:50', 0); +INSERT INTO `tb_permission` VALUES (8, 'sys:sysMenu:save', '新增菜单', '新增菜单', '01', 1, '2022-01-13 13:46:31', 1, '2022-01-13 13:46:31', 0); +INSERT INTO `tb_permission` VALUES (9, 'sys:sysMenu:del', '删除菜单', '删除菜单', '01', 1, '2022-01-13 13:47:31', 1, '2022-01-13 13:47:31', 0); +INSERT INTO `tb_permission` VALUES (10, 'sys:role:list', '获取角色列表', '获取角色列表', '01', 1, '2022-01-13 13:48:10', 1, '2022-01-13 13:48:10', 0); +INSERT INTO `tb_permission` VALUES (11, 'sys:role:update', '更新角色信息', '更新角色信息', '01', 1, '2022-01-13 13:48:25', 1, '2022-01-13 13:48:25', 0); +INSERT INTO `tb_permission` VALUES (12, 'sys:role:save', '新增角色', '新增角色', '01', 1, '2022-01-13 13:48:47', 1, '2022-01-13 13:48:47', 0); +INSERT INTO `tb_permission` VALUES (13, 'sys:role:del', '删除角色', '删除角色', '01', 1, '2022-01-13 13:49:38', 1, '2022-01-13 13:49:38', 0); +INSERT INTO `tb_permission` VALUES (14, 'sys:permission:list', '获取权限列表', '获取权限列表', '01', 1, '2022-01-13 13:50:36', 1, '2022-01-13 13:50:36', 0); +INSERT INTO `tb_permission` VALUES (15, 'sys:permission:update', '更新权限信息', '更新权限信息', '01', 1, '2022-01-13 13:50:59', 1, '2022-01-13 13:50:59', 0); +INSERT INTO `tb_permission` VALUES (16, 'sys:permission:del', '删除权限', '删除权限', '01', 1, '2022-01-13 13:52:00', 1, '2022-01-13 13:52:00', 0); +INSERT INTO `tb_permission` VALUES (18, 'sys:rolePermission:update', '更新角色', '更新角色', '01', 1, '2022-01-13 15:28:10', 1, '2022-01-13 15:28:10', 0); +INSERT INTO `tb_permission` VALUES (19, 'sys:rolePermission:save', '新增角色', '新增角色', '01', 1, '2022-01-13 15:28:31', 1, '2022-01-13 15:28:31', 0); +INSERT INTO `tb_permission` VALUES (20, 'sys:rolePermission:del', '删除角色', '删除角色', '01', 1, '2022-01-13 15:28:55', 1, '2022-01-13 15:28:55', 0); +INSERT INTO `tb_permission` VALUES (21, 'sys:permissionMenu:update', '更新角色菜单', '更新角色菜单', '01', 1, '2022-01-13 17:34:33', 1, '2022-01-13 17:34:33', 0); +INSERT INTO `tb_permission` VALUES (22, 'sys:permissionMenu:save', '新增角色菜单', '新增角色菜单', '01', 1, '2022-01-13 17:34:51', 1, '2022-01-13 17:34:51', 0); +INSERT INTO `tb_permission` VALUES (23, 'sys:permissionMenu:del', '删除角色菜单', '删除角色菜单', '01', 1, '2022-01-13 17:35:08', 1, '2022-01-13 17:35:08', 0); +INSERT INTO `tb_permission` VALUES (24, 'sys:userRole:update', '更新用户角色', '更新用户角色', '01', 1, '2022-01-14 10:41:35', 1, '2022-01-14 10:41:35', 0); +INSERT INTO `tb_permission` VALUES (25, 'sys:userRole:save', '新增用户角色', '新增用户角色', '01', 1, '2022-01-14 10:41:54', 1, '2022-01-14 10:41:54', 0); +INSERT INTO `tb_permission` VALUES (26, 'sys:userRole:del', '删除用户角色', '删除用户角色', '01', 1, '2022-01-14 10:42:14', 1, '2022-01-14 10:42:14', 0); -- ---------------------------- -- Table structure for tb_permission_menu -- ---------------------------- DROP TABLE IF EXISTS `tb_permission_menu`; CREATE TABLE `tb_permission_menu` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, `permission_id` bigint(20) NOT NULL COMMENT '权限id', `menu_id` bigint(20) NOT NULL COMMENT '菜单id', `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人id', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`permission_id`, `menu_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + `update_user_id` bigint(20) NULL DEFAULT NULL COMMENT '修改用户id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `version` bigint(20) NOT NULL DEFAULT 0 COMMENT '版本号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 16 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_permission_menu -- ---------------------------- -INSERT INTO `tb_permission_menu` VALUES (1, 1, NULL, '2021-12-07 11:30:29'); -INSERT INTO `tb_permission_menu` VALUES (1, 2, NULL, '2021-12-07 11:30:37'); -INSERT INTO `tb_permission_menu` VALUES (1, 3, NULL, '2021-12-07 11:30:49'); -INSERT INTO `tb_permission_menu` VALUES (1, 4, NULL, '2021-12-07 11:30:59'); -INSERT INTO `tb_permission_menu` VALUES (1, 5, NULL, '2021-12-07 11:31:07'); -INSERT INTO `tb_permission_menu` VALUES (1, 6, NULL, '2021-12-07 11:45:19'); -INSERT INTO `tb_permission_menu` VALUES (1, 7, NULL, '2021-12-07 11:46:05'); -INSERT INTO `tb_permission_menu` VALUES (1, 8, NULL, '2021-12-10 15:33:16'); -INSERT INTO `tb_permission_menu` VALUES (1, 9, NULL, '2021-12-10 15:33:25'); -INSERT INTO `tb_permission_menu` VALUES (1, 10, NULL, '2021-12-10 15:33:35'); -INSERT INTO `tb_permission_menu` VALUES (1, 11, NULL, '2021-12-10 15:33:46'); -INSERT INTO `tb_permission_menu` VALUES (1, 12, NULL, '2021-12-10 15:33:53'); -INSERT INTO `tb_permission_menu` VALUES (1, 13, NULL, '2021-12-10 15:34:01'); -INSERT INTO `tb_permission_menu` VALUES (1, 14, NULL, '2021-12-10 15:34:16'); -INSERT INTO `tb_permission_menu` VALUES (1, 15, NULL, '2021-12-10 15:34:25'); +INSERT INTO `tb_permission_menu` VALUES (1, 6, 1, 1, '2022-01-13 17:36:59', 1, '2022-01-13 17:36:59', 0); +INSERT INTO `tb_permission_menu` VALUES (2, 6, 2, 1, '2022-01-13 17:37:06', 1, '2022-01-13 17:37:06', 0); +INSERT INTO `tb_permission_menu` VALUES (3, 6, 3, 1, '2022-01-13 17:37:10', 1, '2022-01-13 17:37:10', 0); +INSERT INTO `tb_permission_menu` VALUES (4, 6, 4, 1, '2022-01-13 17:37:15', 1, '2022-01-13 17:37:15', 0); +INSERT INTO `tb_permission_menu` VALUES (5, 6, 5, 1, '2022-01-13 17:37:18', 1, '2022-01-13 17:37:18', 0); +INSERT INTO `tb_permission_menu` VALUES (6, 6, 6, 1, '2022-01-13 17:37:21', 1, '2022-01-13 17:37:21', 0); +INSERT INTO `tb_permission_menu` VALUES (7, 6, 7, 1, '2022-01-13 17:37:25', 1, '2022-01-13 17:37:25', 0); +INSERT INTO `tb_permission_menu` VALUES (8, 6, 8, 1, '2022-01-13 17:37:28', 1, '2022-01-13 17:37:28', 0); +INSERT INTO `tb_permission_menu` VALUES (9, 6, 9, 1, '2022-01-13 17:37:32', 1, '2022-01-13 17:37:32', 0); +INSERT INTO `tb_permission_menu` VALUES (10, 6, 10, 1, '2022-01-13 17:37:42', 1, '2022-01-13 17:37:42', 0); +INSERT INTO `tb_permission_menu` VALUES (11, 6, 11, 1, '2022-01-13 17:37:46', 1, '2022-01-13 17:37:46', 0); +INSERT INTO `tb_permission_menu` VALUES (12, 6, 12, 1, '2022-01-13 17:37:52', 1, '2022-01-13 17:37:52', 0); +INSERT INTO `tb_permission_menu` VALUES (13, 6, 13, 1, '2022-01-13 17:37:55', 1, '2022-01-13 17:37:55', 0); +INSERT INTO `tb_permission_menu` VALUES (14, 6, 14, 1, '2022-01-13 17:37:59', 1, '2022-01-13 17:37:59', 0); +INSERT INTO `tb_permission_menu` VALUES (15, 6, 15, 1, '2022-01-13 17:38:03', 1, '2022-01-13 17:38:03', 0); -- ---------------------------- -- Table structure for tb_role @@ -128,31 +159,55 @@ CREATE TABLE `tb_role` ( `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', `version` bigint(20) NULL DEFAULT 0 COMMENT '版本号', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_role -- ---------------------------- INSERT INTO `tb_role` VALUES (1, 'root', '院长', '最高权限', '01', NULL, '2021-12-04 14:12:34', NULL, '2021-12-04 14:12:38', 1); -INSERT INTO `tb_role` VALUES (2, 'user', '患者', 'ave', '01', NULL, '2021-12-04 16:14:25', NULL, '2021-12-04 16:14:28', 1); -- ---------------------------- -- Table structure for tb_role_permission -- ---------------------------- DROP TABLE IF EXISTS `tb_role_permission`; CREATE TABLE `tb_role_permission` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, `role_id` bigint(20) NOT NULL COMMENT '角色id', `permission_id` bigint(20) NOT NULL COMMENT '权限id', `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人id', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - PRIMARY KEY (`role_id`, `permission_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + `update_user_id` bigint(20) NULL DEFAULT NULL COMMENT '修改用户id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `version` bigint(20) NOT NULL DEFAULT 0 COMMENT '版本号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 33 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_role_permission -- ---------------------------- -INSERT INTO `tb_role_permission` VALUES (1, 1, NULL, '2021-12-04 15:46:39'); -INSERT INTO `tb_role_permission` VALUES (2, 2, NULL, '2021-12-04 16:14:46'); +INSERT INTO `tb_role_permission` VALUES (1, 1, 1, 1, '2022-01-13 16:38:37', 1, '2022-01-13 16:38:37', 0); +INSERT INTO `tb_role_permission` VALUES (2, 1, 19, 1, '2022-01-13 16:38:40', 1, '2022-01-13 16:38:40', 0); +INSERT INTO `tb_role_permission` VALUES (10, 1, 2, 1, '2022-01-13 16:36:09', 1, '2022-01-13 16:36:09', 0); +INSERT INTO `tb_role_permission` VALUES (13, 1, 3, 1, '2022-01-13 16:36:47', 1, '2022-01-13 16:36:47', 0); +INSERT INTO `tb_role_permission` VALUES (14, 1, 4, 1, '2022-01-13 16:36:51', 1, '2022-01-13 16:36:51', 0); +INSERT INTO `tb_role_permission` VALUES (15, 1, 5, 1, '2022-01-13 16:36:54', 1, '2022-01-13 16:36:54', 0); +INSERT INTO `tb_role_permission` VALUES (16, 1, 6, 1, '2022-01-13 16:36:58', 1, '2022-01-13 16:36:58', 0); +INSERT INTO `tb_role_permission` VALUES (17, 1, 7, 1, '2022-01-13 16:37:02', 1, '2022-01-13 16:37:02', 0); +INSERT INTO `tb_role_permission` VALUES (18, 1, 8, 1, '2022-01-13 16:37:07', 1, '2022-01-13 16:37:07', 0); +INSERT INTO `tb_role_permission` VALUES (19, 1, 9, 1, '2022-01-13 16:37:10', 1, '2022-01-13 16:37:10', 0); +INSERT INTO `tb_role_permission` VALUES (20, 1, 10, 1, '2022-01-13 16:37:14', 1, '2022-01-13 16:37:14', 0); +INSERT INTO `tb_role_permission` VALUES (21, 1, 11, 1, '2022-01-13 16:37:17', 1, '2022-01-13 16:37:17', 0); +INSERT INTO `tb_role_permission` VALUES (22, 1, 12, 1, '2022-01-13 16:37:20', 1, '2022-01-13 16:37:20', 0); +INSERT INTO `tb_role_permission` VALUES (23, 1, 13, 1, '2022-01-13 16:37:23', 1, '2022-01-13 16:37:23', 0); +INSERT INTO `tb_role_permission` VALUES (24, 1, 14, 1, '2022-01-13 16:37:27', 1, '2022-01-13 16:37:27', 0); +INSERT INTO `tb_role_permission` VALUES (25, 1, 15, 1, '2022-01-13 16:37:32', 1, '2022-01-13 16:37:32', 0); +INSERT INTO `tb_role_permission` VALUES (26, 1, 16, 1, '2022-01-13 16:37:45', 1, '2022-01-13 16:37:45', 0); +INSERT INTO `tb_role_permission` VALUES (27, 1, 17, 1, '2022-01-13 16:37:49', 1, '2022-01-13 16:37:49', 0); +INSERT INTO `tb_role_permission` VALUES (28, 1, 18, 1, '2022-01-13 16:37:53', 1, '2022-01-13 16:37:53', 0); +INSERT INTO `tb_role_permission` VALUES (29, 1, 20, 1, '2022-01-13 16:38:20', 1, '2022-01-13 16:38:20', 0); +INSERT INTO `tb_role_permission` VALUES (30, 1, 21, 1, '2022-01-13 17:36:25', 1, '2022-01-13 17:36:25', 0); +INSERT INTO `tb_role_permission` VALUES (31, 1, 22, 1, '2022-01-13 17:36:25', 1, '2022-01-13 17:36:25', 0); +INSERT INTO `tb_role_permission` VALUES (32, 1, 23, 1, '2022-01-13 17:36:25', 1, '2022-01-13 17:36:25', 0); -- ---------------------------- -- Table structure for tb_sys_dict @@ -260,31 +315,32 @@ CREATE TABLE `tb_user` ( `status` char(2) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL DEFAULT '01' COMMENT '状态: 01 启用 02停用', `version` bigint(20) NULL DEFAULT 0 COMMENT '版本', PRIMARY KEY (`id`) USING BTREE -) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_user -- ---------------------------- INSERT INTO `tb_user` VALUES (1, 'root', '$2a$10$WJRzfWrjox1WLF//ZSIug.oYUTqGRUFfNxCeCvBce3YJarZqodmua', NULL, NULL, NULL, NULL, NULL, NULL, '01', 0); -INSERT INTO `tb_user` VALUES (2, 'user', '$2a$10$n91ZvgBQDHl8W/InRehe0.XvAXnmSBl4U1af2R015Inba9le.xGIC', '18963733660', NULL, NULL, NULL, 1, '2021-12-11 18:20:02', '01', 5); -- ---------------------------- -- Table structure for tb_user_role -- ---------------------------- DROP TABLE IF EXISTS `tb_user_role`; CREATE TABLE `tb_user_role` ( - `user_id` bigint(20) NOT NULL, - `role_id` bigint(20) NOT NULL, - `creat_user_id` bigint(20) NULL DEFAULT NULL, - `create_time` datetime(0) NULL DEFAULT NULL, - PRIMARY KEY (`user_id`, `role_id`) USING BTREE -) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', + `user_id` bigint(20) NOT NULL COMMENT '用户id', + `role_id` bigint(20) NOT NULL COMMENT '角色id', + `creat_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建用户id', + `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', + `update_user_id` bigint(20) NULL DEFAULT NULL COMMENT '修改用户id', + `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', + `version` bigint(20) NOT NULL DEFAULT 0 COMMENT '版本号', + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic; -- ---------------------------- -- Records of tb_user_role -- ---------------------------- -INSERT INTO `tb_user_role` VALUES (1, 1, 1, '2021-12-04 15:46:04'); -INSERT INTO `tb_user_role` VALUES (1, 2, 1, '2021-12-06 14:15:32'); -INSERT INTO `tb_user_role` VALUES (2, 2, 1, '2021-12-04 16:13:51'); +INSERT INTO `tb_user_role` VALUES (1, 1, 1, 1, '2021-12-04 15:46:04', NULL, NULL, 0); SET FOREIGN_KEY_CHECKS = 1; diff --git a/doc/sql/tb_sys_region.sql b/doc/sql/tb_sys_region.sql deleted file mode 100644 index 6e31d2a8eae8808dbcac857c310a8b96e3bb852b..0000000000000000000000000000000000000000 --- a/doc/sql/tb_sys_region.sql +++ /dev/null @@ -1,40 +0,0 @@ -/* -Navicat MySQL Data Transfer - -Source Server : 本地数据库 -Source Server Version : 80019 -Source Host : localhost:3306 -Source Database : security - -Target Server Type : MYSQL -Target Server Version : 80019 -File Encoding : 65001 - -Date: 2021-12-13 16:35:32 -*/ - -SET FOREIGN_KEY_CHECKS=0; - --- ---------------------------- --- Table structure for tb_sys_region --- ---------------------------- -DROP TABLE IF EXISTS `tb_sys_region`; -CREATE TABLE `tb_sys_region` ( - `region_id` varchar(10) NOT NULL COMMENT '区域主键编号', - `region_name` varchar(50) NOT NULL COMMENT '区域名称', - `region_short_name` varchar(10) DEFAULT NULL COMMENT '区域缩写', - `region_code` varchar(20) DEFAULT NULL COMMENT '行政区域编号', - `region_parent_id` varchar(10) DEFAULT NULL COMMENT '区域父id', - `region_level` int DEFAULT NULL COMMENT '区域级别 1-省、自治区、直辖市 2-地级市、地区、自治州、盟 3-市辖区、县级市、县', - `create_user_id` bigint(20) NULL DEFAULT NULL COMMENT '创建人', - `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', - `update_user_id` bigint(20) NULL DEFAULT NULL COMMENT '修改人', - `update_time` datetime(0) NULL DEFAULT NULL COMMENT '修改时间', - `version` bigint(20) NULL DEFAULT 0 COMMENT '版本号', - PRIMARY KEY (`region_id`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='区域地址表'; - --- ---------------------------- --- Records of tb_sys_region --- ---------------------------- -SET FOREIGN_KEY_CHECKS=1; diff --git a/src/main/java/org/micai/platform/auth/base/exception/GlobalExceptionHandler.java b/src/main/java/org/micai/platform/auth/base/exception/GlobalExceptionHandler.java index 80b8ac798df8ff2b87af33ab4f2bbf4249c10805..db0d83613ccd8b9cfd817dd4ca7c9b2bc9d6ab56 100644 --- a/src/main/java/org/micai/platform/auth/base/exception/GlobalExceptionHandler.java +++ b/src/main/java/org/micai/platform/auth/base/exception/GlobalExceptionHandler.java @@ -2,6 +2,7 @@ package org.micai.platform.auth.base.exception; import lombok.extern.slf4j.Slf4j; import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.constant.ConstantEnum; import org.springframework.dao.DuplicateKeyException; import org.springframework.security.access.AccessDeniedException; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -26,31 +27,31 @@ public class GlobalExceptionHandler { @ExceptionHandler(NoHandlerFoundException.class) public Result handlerNoFoundException(Exception e) { log.error(e.getMessage(), e); - return new Result("404", "路径不存在,请检查路径是否正确"); + return new Result(ConstantEnum.NOT_FOUND); } @ExceptionHandler(DuplicateKeyException.class) public Result handleDuplicateKeyException(DuplicateKeyException e){ log.error(e.getMessage(), e); - return new Result("数据库中已存在该记录"); + return new Result(ConstantEnum.DUPLICATE_KEY); } @ExceptionHandler(ConnectException.class) public Result connectException(ConnectException e){ log.error(e.getMessage(), e); - return new Result("系统调用异常"); + return new Result(ConstantEnum.REQUEST_TIMEOUT); } @ExceptionHandler(ResourceAccessException.class) public Result connectException(ResourceAccessException e){ log.error(e.getMessage(), e); - return new Result("系统之间调用异常"); + return new Result(ConstantEnum.RESOURCE_ACCESS); } @ExceptionHandler(value = AccessDeniedException.class) @ResponseBody public Result accessDeniedException(AccessDeniedException e) { log.error(e.getMessage(), e); - return new Result("Token非法参数异常"); + return new Result(ConstantEnum.ACCESS_DENIED); } } diff --git a/src/main/java/org/micai/platform/auth/base/exception/MyAuthException.java b/src/main/java/org/micai/platform/auth/base/exception/MyAuthException.java new file mode 100644 index 0000000000000000000000000000000000000000..bb37c99327d331eadd20442a916493e7142c4192 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/base/exception/MyAuthException.java @@ -0,0 +1,54 @@ +package org.micai.platform.auth.base.exception; + +import org.micai.platform.auth.constant.ConstantEnum; +import org.springframework.security.core.AuthenticationException; + +/** + * @Author liuCong + * @Date 2022/1/4 17:18 + * @ClassName SecurityException + * @Description + */ +public class MyAuthException extends AuthenticationException { + + private Integer errorCode; + private String errorMessage; + + public MyAuthException(String msg, Throwable cause) { + super(msg, cause); + this.errorMessage = msg; + } + + public MyAuthException(Integer code, String msg) { + super(msg); + this.errorCode = code; + this.errorMessage = msg; + } + + public MyAuthException(Integer errorCode, String errorMessage, Throwable cause) { + super("[" + errorCode + "]" + errorMessage, cause); + this.errorCode = errorCode; + this.errorMessage = errorMessage; + } + + public MyAuthException(ConstantEnum constantEnum) { + this(constantEnum.getCode(), constantEnum.getMessage()); + } + + + public Integer getErrorCode() { + return errorCode; + } + + public void setErrorCode(Integer errorCode) { + this.errorCode = errorCode; + } + + public String getErrorMessage() { + return errorMessage; + } + + public void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/src/main/java/org/micai/platform/auth/base/exception/PlatformException.java b/src/main/java/org/micai/platform/auth/base/exception/PlatformException.java index 2e5c18541e0794d92a7e517de8d0da91a783b556..126848c89e006e3d299f51fb3b3d51857408efb6 100644 --- a/src/main/java/org/micai/platform/auth/base/exception/PlatformException.java +++ b/src/main/java/org/micai/platform/auth/base/exception/PlatformException.java @@ -15,18 +15,13 @@ import org.micai.platform.auth.constant.ConstantEnum; public class PlatformException extends RuntimeException{ private static final long serialVersionUID = 1L; - private String errorCode; + private Integer errorCode; private String errorMessage; public PlatformException() { super(); } - public PlatformException(String errorMessage) { - super(errorMessage); - this.errorMessage = errorMessage; - } - public PlatformException(Throwable cause) { super(cause); } @@ -36,13 +31,13 @@ public class PlatformException extends RuntimeException{ this.errorMessage = msg; } - public PlatformException(String code, String msg) { + public PlatformException(Integer code, String msg) { super(msg); this.errorCode = code; this.errorMessage = msg; } - public PlatformException(String errorCode, String errorMessage, Throwable cause) { + public PlatformException(Integer errorCode, String errorMessage, Throwable cause) { super("[" + errorCode + "]" + errorMessage, cause); this.errorCode = errorCode; this.errorMessage = errorMessage; diff --git a/src/main/java/org/micai/platform/auth/base/result/Result.java b/src/main/java/org/micai/platform/auth/base/result/Result.java index bebed909c738f5fa1888898ceb1d8e83ebd4f694..966f8cf42072c9aa3df4868c43c5821d68c44d18 100644 --- a/src/main/java/org/micai/platform/auth/base/result/Result.java +++ b/src/main/java/org/micai/platform/auth/base/result/Result.java @@ -8,25 +8,21 @@ import org.micai.platform.auth.constant.ConstantEnum; */ @Data public class Result { - private String code; + private Integer code; private String message; private Object data; public Result() {} - public Result(String code, String message) { + public Result(Integer code, String message) { this.code = code; this.message = message; } - public Result(String code, String message, Object data) { + public Result(Integer code, String message, Object data) { this(code, message); this.data = data; } - public Result(String message) { - this.message = message; - } - public Result(ConstantEnum constantEnum) { this.code = constantEnum.getCode(); this.message = constantEnum.getMessage(); diff --git a/src/main/java/org/micai/platform/auth/base/result/UploadResult.java b/src/main/java/org/micai/platform/auth/base/result/UploadResult.java index 2f5ed01a82b0d9b066fe65e8618874e560aa6da9..43cfba293c47164a079fac26878d5a5377d15b5a 100644 --- a/src/main/java/org/micai/platform/auth/base/result/UploadResult.java +++ b/src/main/java/org/micai/platform/auth/base/result/UploadResult.java @@ -17,7 +17,7 @@ public class UploadResult{ /** * 上传状态 */ - private String status; + private Integer status; /** * 提示文字 diff --git a/src/main/java/org/micai/platform/auth/bo/PermissionMenuDelBo.java b/src/main/java/org/micai/platform/auth/bo/PermissionMenuDelBo.java new file mode 100644 index 0000000000000000000000000000000000000000..14e15221b08130b627ceb38bd8f5f68e8b997af3 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/PermissionMenuDelBo.java @@ -0,0 +1,26 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * @Author liuCong + * @Date 2022/1/13 17:06 + * @ClassName PermissionMenuDelBo + * @Description + */ +@Data +@ApiModel(value = "PermissionMenuDelBo") +public class PermissionMenuDelBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "idList", required = true) + @NotEmpty(message = "id不能为空") + private List idList; +} diff --git a/src/main/java/org/micai/platform/auth/bo/PermissionMenuSaveBo.java b/src/main/java/org/micai/platform/auth/bo/PermissionMenuSaveBo.java new file mode 100644 index 0000000000000000000000000000000000000000..ac9084b0403389082ecd0519627a3925d1088f95 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/PermissionMenuSaveBo.java @@ -0,0 +1,29 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/13 17:03 + * @ClassName PermissionMenuSaveBo + * @Description + */ +@Data +@ApiModel(value = "PermissionMenuSaveBo") +public class PermissionMenuSaveBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "权限id不能为空") + @ApiModelProperty(value = "权限id") + private Long permissionId; + + @NotNull(message = "菜单id不能为空") + @ApiModelProperty(value = "菜单id") + private Long menuId; +} diff --git a/src/main/java/org/micai/platform/auth/bo/PermissionMenuUpdateBo.java b/src/main/java/org/micai/platform/auth/bo/PermissionMenuUpdateBo.java new file mode 100644 index 0000000000000000000000000000000000000000..8cb2e5ffb0fb7e582524ea1d7c415da391867a40 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/PermissionMenuUpdateBo.java @@ -0,0 +1,33 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/13 16:57 + * @ClassName PermissionMenuUpdateBo + * @Description + */ +@Data +@ApiModel(value = "PermissionMenuUpdateBo") +public class PermissionMenuUpdateBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "主键id不能为空") + @ApiModelProperty(value = "主键id") + private Long id; + + @NotNull(message = "权限id不能为空") + @ApiModelProperty(value = "权限id") + private Long permissionId; + + @NotNull(message = "菜单id不能为空") + @ApiModelProperty(value = "菜单id") + private Long menuId; +} diff --git a/src/main/java/org/micai/platform/auth/bo/RolePermissionDelBo.java b/src/main/java/org/micai/platform/auth/bo/RolePermissionDelBo.java new file mode 100644 index 0000000000000000000000000000000000000000..fece4bbed514d9898d5d10906c05be0073abe583 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/RolePermissionDelBo.java @@ -0,0 +1,26 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * @Author liuCong + * @Date 2022/1/13 15:11 + * @ClassName RolePermissionDelBo + * @Description + */ +@Data +@ApiModel(value = "用户删除") +public class RolePermissionDelBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "idList", required = true) + @NotEmpty(message = "id不能为空") + private List idList; +} diff --git a/src/main/java/org/micai/platform/auth/bo/RolePermissionSaveBo.java b/src/main/java/org/micai/platform/auth/bo/RolePermissionSaveBo.java new file mode 100644 index 0000000000000000000000000000000000000000..d117fc84d885f234596b8fcb9cba5676df76bfe5 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/RolePermissionSaveBo.java @@ -0,0 +1,31 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/13 14:35 + * @ClassName RolePermissionSaveBo + * @Description + */ +@Data +@ApiModel(value = "RolePermissionSaveBo") +public class RolePermissionSaveBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "角色id不能为空") + @ApiModelProperty(value = "角色id") + private Long roleId; + + @NotNull(message = "权限id不能为空") + @ApiModelProperty(value = "权限id") + private Long permissionId; + + +} diff --git a/src/main/java/org/micai/platform/auth/bo/RolePermissionUpdateBo.java b/src/main/java/org/micai/platform/auth/bo/RolePermissionUpdateBo.java new file mode 100644 index 0000000000000000000000000000000000000000..4ef8d5f92c10242e227a0f70e97fe225de86f3f2 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/RolePermissionUpdateBo.java @@ -0,0 +1,33 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/13 14:38 + * @ClassName RolePermissionUpateBo + * @Description + */ +@Data +@ApiModel(value = "RolePermissionUpdateBo") +public class RolePermissionUpdateBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "主键id不能为空") + @ApiModelProperty(value = "主键id") + private Long id; + + @NotNull(message = "用户id不能为空") + @ApiModelProperty(value = "用户id") + private Long userId; + + @NotNull(message = "角色id不能为空") + @ApiModelProperty(value = "角色id") + private Long roleId; +} diff --git a/src/main/java/org/micai/platform/auth/bo/UserQueryBo.java b/src/main/java/org/micai/platform/auth/bo/UserQueryBo.java index 052c8decfdc144726ec23e12bf2f3dad27598ce5..2ebb49800629aaa9e3ad937a7fcc3ec6968628fb 100644 --- a/src/main/java/org/micai/platform/auth/bo/UserQueryBo.java +++ b/src/main/java/org/micai/platform/auth/bo/UserQueryBo.java @@ -1,11 +1,26 @@ package org.micai.platform.auth.bo; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import lombok.experimental.Accessors; + +import java.io.Serializable; @Data -public class UserQueryBo { +@ApiModel(value = "用户登录bo") +@Accessors(chain = true) +public class UserQueryBo implements Serializable { + + private static final long serialVersionUID = 1L; + @ApiModelProperty(value = "用户名") private String username; + + @ApiModelProperty(value = "密码") private String password; - private String code; + + @ApiModelProperty(value = "图形验证码") + private String imageCode; + } diff --git a/src/main/java/org/micai/platform/auth/bo/UserRoleDelBo.java b/src/main/java/org/micai/platform/auth/bo/UserRoleDelBo.java new file mode 100644 index 0000000000000000000000000000000000000000..5e76d2178806342a1e5d4a8499533f5c2d94bfa1 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/UserRoleDelBo.java @@ -0,0 +1,26 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * @Author liuCong + * @Date 2022/1/14 9:27 + * @ClassName UserRoleDelBo + * @Description + */ +@Data +@ApiModel(value = "UserRoleDelBo") +public class UserRoleDelBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "idList", required = true) + @NotEmpty(message = "id不能为空") + private List idList; +} diff --git a/src/main/java/org/micai/platform/auth/bo/UserRoleSaveBo.java b/src/main/java/org/micai/platform/auth/bo/UserRoleSaveBo.java new file mode 100644 index 0000000000000000000000000000000000000000..8239ace852971ecf035a415391e82ff44147c9cd --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/UserRoleSaveBo.java @@ -0,0 +1,30 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/14 9:26 + * @ClassName UserRoleSaveBo + * @Description + */ +@Data +@ApiModel(value = "UserRoleSaveBo") +public class UserRoleSaveBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "用户id不能为空") + @ApiModelProperty(value = "用户id") + private Long userId; + + @NotNull(message = "角色id不能为空") + @ApiModelProperty(value = "角色id") + private Long roleId; + +} diff --git a/src/main/java/org/micai/platform/auth/bo/UserRoleUpdateBo.java b/src/main/java/org/micai/platform/auth/bo/UserRoleUpdateBo.java new file mode 100644 index 0000000000000000000000000000000000000000..bea8fa2007faa62128883cb681c469ff3bee39fd --- /dev/null +++ b/src/main/java/org/micai/platform/auth/bo/UserRoleUpdateBo.java @@ -0,0 +1,34 @@ +package org.micai.platform.auth.bo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.io.Serializable; + +/** + * @Author liuCong + * @Date 2022/1/14 9:26 + * @ClassName UserRoleUpdateBo + * @Description + */ +@Data +@ApiModel(value = "UserRoleUpdateBo") +public class UserRoleUpdateBo implements Serializable { + + private static final long serialVersionUID = 1L; + + @NotNull(message = "主键id不能为空") + @ApiModelProperty(value = "主键id") + private Long id; + + @NotNull(message = "用户id不能为空") + @ApiModelProperty(value = "用户id") + private Long userId; + + @NotNull(message = "角色id不能为空") + @ApiModelProperty(value = "角色id") + private Long roleId; + +} diff --git a/src/main/java/org/micai/platform/auth/config/WebSecurityConfig.java b/src/main/java/org/micai/platform/auth/config/WebSecurityConfig.java index 321ee8b90465801b382f6f39ce83c213acca6176..284d26e9dc2c4eb1d744412a362ccf43e3dedcb5 100644 --- a/src/main/java/org/micai/platform/auth/config/WebSecurityConfig.java +++ b/src/main/java/org/micai/platform/auth/config/WebSecurityConfig.java @@ -1,7 +1,10 @@ package org.micai.platform.auth.config; +import org.micai.platform.auth.constant.ConstantCode; +import org.micai.platform.auth.filter.ImageCodeValidateFilter; import org.micai.platform.auth.filter.JWTAuthenticationFilter; import org.micai.platform.auth.filter.JWTLoginFilter; +import org.micai.platform.auth.handler.CustomAuthenticationFailureHandler; import org.micai.platform.auth.handler.Http401AuthenticationEntryPoint; import org.micai.platform.auth.provider.CustomAuthenticationProvider; import org.micai.platform.auth.service.*; @@ -19,6 +22,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; /** * SpringSecurity的配置 * 通过SpringSecurity的配置,将JWTLoginFilter,JWTAuthenticationFilter组合在一起 + * * @author zhaoxinguo on 2017/9/13. */ @Configuration @@ -32,18 +36,17 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { private static final String[] AUTH_WHITELIST = { // -- register url "/users/signup", - "/users/addTask", "/upload/store", + // -- swagger ui "/v2/api-docs", "/swagger-resources", "/swagger-resources/**", - "/configuration/ui", - "/configuration/security", "/webjars/**", - //"classpath:/META-INF/resources/webjars/", - "/doc.html" - // "classpath:/META-INF/resources/" + "/doc.html", + + // -- image code + "/image/code" // other public endpoints of your API may be appended to this array }; @@ -65,30 +68,46 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private PermissionService permissionService; - @Value("${sign.key}") + @Autowired + private CustomAuthenticationFailureHandler customAuthenticationFailureHandler; + + @Autowired + private ImageCodeValidateFilter imageCodeValidateFilter; + + @Value("${jwt.sign.key}") private String signKey; + @Value("${jwt.expiration.time}") + private int expirationTime; + /** * 设置 HTTP 验证规则 + * * @param http * @throws Exception */ @Override protected void configure(HttpSecurity http) throws Exception { - http.cors().and().csrf().disable() - .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and() - .authorizeRequests() - .antMatchers(AUTH_WHITELIST).permitAll() - .anyRequest().authenticated() // 所有请求需要身份认证 + http + + .cors().and().csrf().disable()//禁止跨域 + .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)//session管理机制: 不会保存session状态 + .and() - .exceptionHandling() - .authenticationEntryPoint( - new Http401AuthenticationEntryPoint("Basic realm=\"MyApp\"")) + .exceptionHandling()// 自定义异常处理 + .authenticationEntryPoint(new Http401AuthenticationEntryPoint(ConstantCode.BASE_REALM)) // 未登录处理 +// .and()//权限不足处理.exceptionHandling().accessDeniedHandler(customAccessDeniedHandler) // 自定义访问失败处理器 + .and() -// .exceptionHandling().accessDeniedHandler(customAccessDeniedHandler) // 自定义访问失败处理器 -// .and() - .addFilter(new JWTLoginFilter(authenticationManager(), signKey)) + // 自定义过滤器 + .addFilterBefore(imageCodeValidateFilter,JWTLoginFilter.class) + .addFilter(new JWTLoginFilter(authenticationManager(), signKey, expirationTime, customAuthenticationFailureHandler)) .addFilter(new JWTAuthenticationFilter(authenticationManager(), signKey)) + .authorizeRequests()// 验证策略 + .antMatchers(AUTH_WHITELIST).permitAll()// 无需验证路径 + .anyRequest().authenticated() // 所有请求需要身份认证 + + .and() .logout() // 默认注销行为为logout,可以通过下面的方式来修改 .logoutUrl("/logout") .logoutSuccessUrl("/login")// 设置注销成功后跳转页面,默认是跳转到登录页面; @@ -98,6 +117,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { /** * 该方法是登录的时候会进入 + * * @param auth * @throws Exception */ diff --git a/src/main/java/org/micai/platform/auth/constant/ConstantCode.java b/src/main/java/org/micai/platform/auth/constant/ConstantCode.java index df7f5a0150ed643221a4459a8ee52c617fe139ca..240702d9b483b19908972eb7aca672f5149ba689 100644 --- a/src/main/java/org/micai/platform/auth/constant/ConstantCode.java +++ b/src/main/java/org/micai/platform/auth/constant/ConstantCode.java @@ -54,6 +54,16 @@ public class ConstantCode { */ public static final int INT_TEN = 10; + /** + * 100 + */ + public static final int INT_ONE_HUNDRED = 100; + + /** + * 200 + */ + public static final int INT_TWO_HUNDRED = 200; + /** * 角色前缀 */ @@ -64,6 +74,11 @@ public class ConstantCode { */ public static final String AUTHORIZATION = "Authorization"; + /** + * 认证 + */ + public static final String REFRESH_AUTHORIZATION = "refreshAuthorization"; + /** * 通行前缀 */ @@ -100,6 +115,12 @@ public class ConstantCode { public static final String HEIGHT = "height"; + /** + * SESSION_KEY_IMAGE_CODE + */ + public static final String SESSION_KEY = "SESSION_KEY_IMAGE_CODE"; + + /** * 文件存储-缩略图目录 @@ -218,4 +239,30 @@ public class ConstantCode { public static final String STORAGE_MAX_WIDTH = "storage_max_width"; public static final String THUMBNAIL_POST_SIZE = "thumbnail_post_size"; + + + /** + * 图片code + */ + public static final String IMAGE_CODE = "imageCode"; + + /** + * BASE_REALM + */ + public static final String BASE_REALM = "Basic realm=\"MyApp\""; + + /** + * username + */ + public static final String USERNAME = "username"; + + /** + * password + */ + public static final String PASSWORD = "password"; + + /** + * JSESSIONID + */ + public static final String JSESSIONID = "JSESSIONID"; } diff --git a/src/main/java/org/micai/platform/auth/constant/ConstantEnum.java b/src/main/java/org/micai/platform/auth/constant/ConstantEnum.java index 28ce06f9cd03f8d11bca735ca69e024f51b009e2..4fc71faea36e30c97ea729ae5ba6980a8c4cc377 100644 --- a/src/main/java/org/micai/platform/auth/constant/ConstantEnum.java +++ b/src/main/java/org/micai/platform/auth/constant/ConstantEnum.java @@ -1,5 +1,7 @@ package org.micai.platform.auth.constant; +import javax.servlet.http.HttpServletResponse; + /** * @Author liuCong * @Date 2021/12/30 10:15 @@ -8,77 +10,95 @@ package org.micai.platform.auth.constant; */ public enum ConstantEnum { - SUCCESS("10000", "成功"), + SUCCESS(HttpServletResponse.SC_OK, "成功"), + + FAIL(HttpServletResponse.SC_BAD_REQUEST, "失败"), + + TOKEN_ERROR(HttpServletResponse.SC_FORBIDDEN, "无效TOKEN, 请重新登录!"), + + TOKEN_MISS(HttpServletResponse.SC_FORBIDDEN, "token 丢失"), + + USER_CODE_ERROR(HttpServletResponse.SC_UNAUTHORIZED, "用户名或密码错误"), + + NOT_FOUND(HttpServletResponse.SC_NOT_FOUND, "路径不存在,请检查路径是否正确"), + + REQUEST_TIMEOUT(HttpServletResponse.SC_REQUEST_TIMEOUT, "系统调用异常"), + + USER_OLD_PASSWORD(10005,"原密码不正确"), + + USER_FREEZE(10007,"用户已冻结"), + + REDIS_CONNECT_ERROR(10008,"redis 连接异常"), - FAIL("10001", "失败"), + PARAM_ERROR(10009, "参数为空"), - TOKEN_ERROR("10002", "无效TOKEN, 请重新登录!"), + VALIDATION_CODE_ERROR(10010, "验证码失效,请重新获取"), - TOKEN_MISS("10003", "token 丢失"), + USER_EXIST(10011, "该用户已存在"), - USER_CODE_ERROR("10004", "用户名或密码错误"), + UPDATE_ERROR(10012, "更新失败,请重试"), - USER_OLD_PASSWORD("10005","原密码不正确"), + NO_FILE(10013, "未包含文件上传域"), - USER_FREEZE("10007","用户已冻结"), + TYPE(10014, "不允许的文件格式"), - REDIS_CONNECT_ERROR("10008","redis 连接异常"), + SIZE(10015, "文件大小超出限制,最大支持2Mb"), - PARAM_ERROR("10009", "参数为空"), + EN_TYPE(10016, "请求类型ENTYPE错误"), - VALIDATION_CODE_ERROR("10010", "验证码失效,请重新获取"), + REQUEST(10017, "上传请求异常"), - USER_EXIST("10011", "该用户已存在"), + IO(10018, "IO异常"), - UPDATE_ERROR("10012", "更新失败,请重试"), + DIR(10019, "目录创建失败"), - NO_FILE("10013", "未包含文件上传域"), + UNKNOWN(10020, "未知错误"), - TYPE("10014", "不允许的文件格式"), + NO_ROLE(10021, "没有角色信息"), - SIZE("10015", "文件大小超出限制,最大支持2Mb"), + NO_ALIYUN_CONFIG(10022, "请先在后台设置阿里云配置信息"), - EN_TYPE("10016", "请求类型ENTYPE错误"), + NO_PERMISSION(10023, "没有权限信息"), - REQUEST("10017", "上传请求异常"), + SIGNATURE_EX(10024, "签名错误"), - IO("10018", "IO异常"), + ILLEGAL_ARG(10025, "非法错误"), - DIR("10019", "目录创建失败"), + EXPIRED_JWT(10026, "token过期,请重新登录"), - UNKNOWN("10020", "未知错误"), + DUPLICATE_KEY(10027, "数据库中已存在该记录"), - NO_ROLE("10021", "没有角色信息"), + RESOURCE_ACCESS(10028, "系统之间调用异常"), - NO_ALIYUN_CONFIG("10022", "请先在后台设置阿里云配置信息"), + ACCESS_DENIED(HttpServletResponse.SC_FORBIDDEN, "Token非法参数异常"), - NO_PERMISSION("10023", "没有权限信息"), + IMAGE_ERROR(10029, "验证码为空或者验证码输入有误"), - SIGNATURE_EX("10024", "签名错误"), + LOGINED(10030, "账号已被登录"), - ILLEGAL_ARG("10025", "非法错误"), + EXPIRED_LOGIN(HttpServletResponse.SC_BAD_REQUEST, "登录超时,请重新登录"), - EXPIRED_JWT("10026", "token过期,请重新登录"); + DATA_DUPLICATION(10031, "数据重复"); - private String code; + private Integer code; private String message; - ConstantEnum(String code, String message) { + ConstantEnum(Integer code, String message) { this.code = code; this.message = message; } - public String getCode() { + public int getCode() { return code; } - public void setCode(String code) { + public void setCode(Integer code) { this.code = code; } diff --git a/src/main/java/org/micai/platform/auth/controller/ImageCodeController.java b/src/main/java/org/micai/platform/auth/controller/ImageCodeController.java new file mode 100644 index 0000000000000000000000000000000000000000..64bbe2bfc5977cf477144e52985d430f8cbd970f --- /dev/null +++ b/src/main/java/org/micai/platform/auth/controller/ImageCodeController.java @@ -0,0 +1,47 @@ +package org.micai.platform.auth.controller; + +import cn.hutool.captcha.CaptchaUtil; +import cn.hutool.captcha.LineCaptcha; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.constant.ConstantCode; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; + +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @Author liuCong + * @Date 2022/1/4 10:53 + * @ClassName ImageCodeController + * @Description + */ +@Controller +@Api(tags = "图形验证码", value = "图形验证码") +@RequestMapping("/image") +@Slf4j +public class ImageCodeController extends BaseController { + + + @GetMapping("/code") + @ApiOperation(value = "获取图形验证码", notes = "获取图形验证码") + public void getImage(HttpServletRequest request, HttpServletResponse response) { + try { + LineCaptcha lineCaptcha = CaptchaUtil.createLineCaptcha(ConstantCode.INT_TWO_HUNDRED, ConstantCode.INT_ONE_HUNDRED); + String code = lineCaptcha.getCode(); + log.info("code info:{}", code); + request.getSession().setAttribute(ConstantCode.SESSION_KEY, code); + ServletOutputStream outputStream = response.getOutputStream(); + lineCaptcha.write(outputStream); + outputStream.flush(); + outputStream.close(); + } catch (Exception e) { + log.error("error info:", e); + } + } + +} diff --git a/src/main/java/org/micai/platform/auth/controller/JwtExceptionController.java b/src/main/java/org/micai/platform/auth/controller/JwtExceptionController.java index bb5a61a90fa3e716b31538d36a11a2b665983914..7777f5e900a6e7d5c3842426254bcc10588153f6 100644 --- a/src/main/java/org/micai/platform/auth/controller/JwtExceptionController.java +++ b/src/main/java/org/micai/platform/auth/controller/JwtExceptionController.java @@ -4,12 +4,12 @@ import io.jsonwebtoken.ExpiredJwtException; import io.jsonwebtoken.MalformedJwtException; import io.jsonwebtoken.SignatureException; import io.jsonwebtoken.UnsupportedJwtException; -import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; -import org.micai.platform.auth.constant.ConstantEnum; import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.constant.ConstantEnum; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import springfox.documentation.annotations.ApiIgnore; import javax.servlet.http.HttpServletRequest; @@ -21,7 +21,7 @@ import javax.servlet.http.HttpServletRequest; * @Version 1.0 */ @RestController -@Api(tags = "Jwt异常处理类",value = "Jwt异常处理类") +@ApiIgnore @Slf4j public class JwtExceptionController { diff --git a/src/main/java/org/micai/platform/auth/controller/OrganUserController.java b/src/main/java/org/micai/platform/auth/controller/OrganUserController.java new file mode 100644 index 0000000000000000000000000000000000000000..b7afab99dd6fa18b973fad32b4850bf0231da081 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/controller/OrganUserController.java @@ -0,0 +1,20 @@ +package org.micai.platform.auth.controller; + + +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + *

+ * 前端控制器 + *

+ * + * @author liucong + * @since 2022-01-13 + */ +@RestController +@RequestMapping("/Tb/organUser") +public class OrganUserController { + +} + diff --git a/src/main/java/org/micai/platform/auth/controller/PermissionController.java b/src/main/java/org/micai/platform/auth/controller/PermissionController.java index 4fc5ceaa28280d8bcd67a1c6189e8c1a8df949c8..aaed3e51ecc7ba0f7805faec55347e1dfcecc78b 100644 --- a/src/main/java/org/micai/platform/auth/controller/PermissionController.java +++ b/src/main/java/org/micai/platform/auth/controller/PermissionController.java @@ -5,21 +5,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.bo.PermissionDelBo; import org.micai.platform.auth.bo.PermissionFindBo; import org.micai.platform.auth.bo.PermissionSaveBo; import org.micai.platform.auth.bo.PermissionUpdateBo; import org.micai.platform.auth.constant.ConstantEnum; -import org.micai.platform.auth.base.exception.PlatformException; -import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.service.PermissionService; import org.micai.platform.auth.vo.RoleListVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -41,8 +38,8 @@ public class PermissionController extends BaseController{ private PermissionService permissionService; @ApiOperation(value = "获取权限列表", notes = "获取权限列表") - @PostMapping("/getPermissionList") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/list") + @PreAuthorize("hasAnyAuthority('sys:permission:list')") public Result getPermissionList(@RequestBody PermissionFindBo bo){ Result result; try { @@ -60,8 +57,8 @@ public class PermissionController extends BaseController{ @ApiOperation(value = "更新权限信息", notes = "更新权限信息") - @PostMapping("/updatePermission") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:permission:update')") public Result updatePermission(@RequestBody @Valid PermissionUpdateBo bo){ Result result; try { @@ -78,8 +75,8 @@ public class PermissionController extends BaseController{ } @ApiOperation(value = "新增权限", notes = "新增权限") - @PostMapping("/savePermission") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:permission:save')") public Result savePermission(@RequestBody @Valid PermissionSaveBo bo){ Result result; try { @@ -96,8 +93,8 @@ public class PermissionController extends BaseController{ } @ApiOperation(value = "删除权限", notes = "删除权限") - @PostMapping("/delPermission") - @PreAuthorize("hasAnyAuthority('root')") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:permission:del')") public Result delPermission(@RequestBody @Valid PermissionDelBo bo){ Result result; try { diff --git a/src/main/java/org/micai/platform/auth/controller/PermissionMenuController.java b/src/main/java/org/micai/platform/auth/controller/PermissionMenuController.java new file mode 100644 index 0000000000000000000000000000000000000000..17a87072cde53c5042632d3ce785e8b433374694 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/controller/PermissionMenuController.java @@ -0,0 +1,89 @@ +package org.micai.platform.auth.controller; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.bo.*; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.service.PermissionMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + *

+ * 前端控制器 + *

+ * + * @author liucong + * @since 2022-01-13 + */ +@RestController +@RequestMapping("/permissionMenu") +@Slf4j +@Api(tags = "权限菜单管理", value = "权限菜单管理") +public class PermissionMenuController extends BaseController{ + @Autowired + private PermissionMenuService permissionMenuService; + + + @ApiOperation(value = "更新角色菜单权限", notes = "更新角色菜单权限") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:permissionMenu:update')") + public Result updatePM(@RequestBody @Valid PermissionMenuUpdateBo bo){ + Result result; + try { + permissionMenuService.updatePM(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "新增角色菜单权限", notes = "新增角色菜单权限") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:permissionMenu:save')") + public Result savePM(@RequestBody @Valid PermissionMenuSaveBo bo){ + Result result; + try { + permissionMenuService.savePM(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "删除角色菜单权限", notes = "删除角色菜单权限") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:permissionMenu:del')") + public Result delPM(@RequestBody @Valid PermissionMenuDelBo bo){ + Result result; + try { + permissionMenuService.delPM(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } +} + diff --git a/src/main/java/org/micai/platform/auth/controller/RoleController.java b/src/main/java/org/micai/platform/auth/controller/RoleController.java index 911801830a5dbfad9c487cf5c4abea44b76d3257..71683456dccaa45865ff74836d60d00958af45ed 100644 --- a/src/main/java/org/micai/platform/auth/controller/RoleController.java +++ b/src/main/java/org/micai/platform/auth/controller/RoleController.java @@ -5,21 +5,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.bo.RoleDelBo; import org.micai.platform.auth.bo.RoleFindBo; import org.micai.platform.auth.bo.RoleSaveBo; import org.micai.platform.auth.bo.RoleUpdateBo; import org.micai.platform.auth.constant.ConstantEnum; -import org.micai.platform.auth.base.exception.PlatformException; -import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.service.RoleService; import org.micai.platform.auth.vo.UserListVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -41,8 +38,8 @@ public class RoleController extends BaseController { private RoleService roleService; @ApiOperation(value = "获取角色列表", notes = "获取角色列表") - @PostMapping("/getRoleList") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/list") + @PreAuthorize("hasAnyAuthority('sys:role:list')") public Result getRoleList(@RequestBody RoleFindBo bo){ Result result; try { @@ -60,8 +57,8 @@ public class RoleController extends BaseController { @ApiOperation(value = "更新角色信息", notes = "更新角色信息") - @PostMapping("/updateRole") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:role:update')") public Result updateRole(@RequestBody @Valid RoleUpdateBo bo){ Result result; try { @@ -78,8 +75,8 @@ public class RoleController extends BaseController { } @ApiOperation(value = "新增角色", notes = "新增角色") - @PostMapping("/saveRole") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:role:save')") public Result saveRole(@RequestBody @Valid RoleSaveBo bo){ Result result; try { @@ -96,8 +93,8 @@ public class RoleController extends BaseController { } @ApiOperation(value = "删除角色", notes = "删除角色") - @PostMapping("/delRole") - @PreAuthorize("hasAnyAuthority('root')") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:role:del')") public Result delRole(@RequestBody @Valid RoleDelBo bo){ Result result; try { diff --git a/src/main/java/org/micai/platform/auth/controller/RolePermissionController.java b/src/main/java/org/micai/platform/auth/controller/RolePermissionController.java new file mode 100644 index 0000000000000000000000000000000000000000..acc5640bb897745f83ad15039f941012cae0c206 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/controller/RolePermissionController.java @@ -0,0 +1,92 @@ +package org.micai.platform.auth.controller; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.bo.RolePermissionDelBo; +import org.micai.platform.auth.bo.RolePermissionSaveBo; +import org.micai.platform.auth.bo.RolePermissionUpdateBo; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.service.RolePermissionService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + *

+ * 前端控制器 + *

+ * + * @author liucong + * @since 2022-01-13 + */ +@RestController +@RequestMapping("/rolePermission") +@Slf4j +@Api(tags = "角色权限管理", value = "角色权限管理") +public class RolePermissionController extends BaseController{ + + @Autowired + private RolePermissionService rolePermissionService; + + + @ApiOperation(value = "更新角色权限", notes = "更新角色权限") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:rolePermission:update')") + public Result updateRP(@RequestBody @Valid RolePermissionUpdateBo bo){ + Result result; + try { + rolePermissionService.updateRP(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "新增角色权限", notes = "新增角色权限") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:rolePermission:save')") + public Result saveRP(@RequestBody @Valid RolePermissionSaveBo bo){ + Result result; + try { + rolePermissionService.saveRP(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "删除角色权限", notes = "删除角色权限") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:rolePermission:del')") + public Result delRP(@RequestBody @Valid RolePermissionDelBo bo){ + Result result; + try { + rolePermissionService.delRP(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } +} + diff --git a/src/main/java/org/micai/platform/auth/controller/SysDictController.java b/src/main/java/org/micai/platform/auth/controller/SysDictController.java index 853afcccf9452c50fc570faf828e55d0d3de9f42..ef77b8ae517119de0837cab9f50598a9e2066b97 100644 --- a/src/main/java/org/micai/platform/auth/controller/SysDictController.java +++ b/src/main/java/org/micai/platform/auth/controller/SysDictController.java @@ -2,8 +2,7 @@ package org.micai.platform.auth.controller; import org.springframework.web.bind.annotation.RequestMapping; - -import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.RestController; /** *

@@ -13,7 +12,7 @@ import org.springframework.stereotype.Controller; * @author liucong * @since 2021-12-06 */ -@Controller +@RestController @RequestMapping("/Tb/sysDict") public class SysDictController { diff --git a/src/main/java/org/micai/platform/auth/controller/SysMenuController.java b/src/main/java/org/micai/platform/auth/controller/SysMenuController.java index b769d3c5bc29db424ee51ff586c07b79a31f8532..d593be81c3a4ebd5fc57450dafeef0681439ce30 100644 --- a/src/main/java/org/micai/platform/auth/controller/SysMenuController.java +++ b/src/main/java/org/micai/platform/auth/controller/SysMenuController.java @@ -5,19 +5,16 @@ import cn.hutool.core.lang.tree.Tree; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.bo.MenuDelBo; import org.micai.platform.auth.bo.MenuSaveBo; import org.micai.platform.auth.bo.MenuUpdateBo; import org.micai.platform.auth.constant.ConstantEnum; -import org.micai.platform.auth.base.exception.PlatformException; -import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.service.SysMenuService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; @@ -40,7 +37,8 @@ public class SysMenuController extends BaseController{ private SysMenuService sysMenuService; - @PostMapping("/find") + @PostMapping("/list") + @PreAuthorize("hasAnyAuthority('sys:sysMenu:list')") @ApiOperation(value = "查询菜单", notes = "登录后查询菜单列表") public Result find() { Result result; @@ -59,8 +57,8 @@ public class SysMenuController extends BaseController{ @ApiOperation(value = "更新菜单", notes = "更新菜单") - @PostMapping("/updateMenu") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:sysMenu:update')") public Result updateMenu(@RequestBody @Valid MenuUpdateBo bo){ Result result; try { @@ -77,8 +75,8 @@ public class SysMenuController extends BaseController{ } @ApiOperation(value = "新增菜单", notes = "新增菜单") - @PostMapping("/saveMenu") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:sysMenu:save')") public Result saveMenu(@RequestBody @Valid MenuSaveBo bo){ Result result; try { @@ -95,8 +93,8 @@ public class SysMenuController extends BaseController{ } @ApiOperation(value = "删除菜单", notes = "删除菜单") - @PostMapping("/delMenu") - @PreAuthorize("hasAnyAuthority('root')") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:sysMenu:del')") public Result delMenu(@RequestBody @Valid MenuDelBo bo){ Result result; try { diff --git a/src/main/java/org/micai/platform/auth/controller/UserController.java b/src/main/java/org/micai/platform/auth/controller/UserController.java index 92b720f7e257fb37b135ade59085058786653313..a36e4b59cb85f3bdcbe9494ca8b6c21098375614 100644 --- a/src/main/java/org/micai/platform/auth/controller/UserController.java +++ b/src/main/java/org/micai/platform/auth/controller/UserController.java @@ -15,6 +15,7 @@ import org.micai.platform.auth.base.result.Result; import org.micai.platform.auth.vo.UserListVo; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; import javax.validation.Valid; import java.util.HashMap; @@ -27,19 +28,20 @@ import java.util.Map; @Slf4j @Api(tags = "用户管理", value = "用户管理") @RestController -@RequestMapping("/users") +@RequestMapping("/user") public class UserController extends BaseController { /** * 注册用户 默认开启白名单 * @param user */ + @ApiIgnore @ApiOperation(value = "注册用户",notes = "注册用户") @PostMapping("/signup") public Result signup(@RequestBody User user) { User bizUser = userService.findByUsername(user.getUsername()); if(null != bizUser){ - throw new PlatformException("用户已经存在"); + throw new PlatformException(ConstantEnum.USER_EXIST); } /*user.setPassword(DigestUtils.md5DigestAsHex((user.getPassword()).getBytes()));*/ user.setPassword(bCryptPasswordEncoder.encode(user.getPassword())); @@ -51,9 +53,9 @@ public class UserController extends BaseController { * 获取用户列表 * @return */ - @ApiOperation(value = "获取用户列表",notes = "获取用户列表") + @ApiIgnore + @ApiOperation(value = "获取用户列表old",notes = "获取用户列表old") @GetMapping("/userList") - @PreAuthorize("hasAnyAuthority('admin')") public Map userList(){ List users = userService.findUserList(); Map map = new HashMap(); @@ -65,6 +67,7 @@ public class UserController extends BaseController { * 获取用户权限 * @return */ + @ApiIgnore @ApiOperation(value = "获取用户权限",notes = "获取用户权限") @GetMapping("/authorityList") public List authorityList(){ @@ -78,8 +81,8 @@ public class UserController extends BaseController { * @return */ @ApiOperation(value = "获取用户列表", notes = "获取用户列表") - @PostMapping("/getUserList") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/list") + @PreAuthorize("hasAnyAuthority('sys:user:List')") public Result getUserList(@RequestBody UserFindBo bo){ Result result; try { @@ -97,8 +100,8 @@ public class UserController extends BaseController { @ApiOperation(value = "更新用户", notes = "更新用户") - @PostMapping("/updateUser") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:user:update')") public Result updateUser(@RequestBody @Valid UserUpdateBo bo){ Result result; try { @@ -115,8 +118,8 @@ public class UserController extends BaseController { } @ApiOperation(value = "新增用户", notes = "新增用户") - @PostMapping("/saveUser") - @PreAuthorize("hasAnyAuthority('root')") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:user:save')") public Result saveUser(@RequestBody @Valid UserSaveBo bo){ Result result; try { @@ -133,8 +136,8 @@ public class UserController extends BaseController { } @ApiOperation(value = "删除用户", notes = "删除用户") - @PostMapping("/delUser") - @PreAuthorize("hasAnyAuthority('root')") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:user:del')") public Result delUser(@RequestBody @Valid UserDelBo bo){ Result result; try { diff --git a/src/main/java/org/micai/platform/auth/controller/UserRoleController.java b/src/main/java/org/micai/platform/auth/controller/UserRoleController.java new file mode 100644 index 0000000000000000000000000000000000000000..b2d7254552a04c44d036ad1152c2d10a7f606bdb --- /dev/null +++ b/src/main/java/org/micai/platform/auth/controller/UserRoleController.java @@ -0,0 +1,91 @@ +package org.micai.platform.auth.controller; + + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.bo.UserRoleDelBo; +import org.micai.platform.auth.bo.UserRoleSaveBo; +import org.micai.platform.auth.bo.UserRoleUpdateBo; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.service.UserRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.web.bind.annotation.*; + +import javax.validation.Valid; + +/** + *

+ * 前端控制器 + *

+ * + * @author liucong + * @since 2022-01-13 + */ +@RestController +@RequestMapping("/userRole") +@Slf4j +@Api(tags = "用户角色管理", value = "用户角色管理") +public class UserRoleController extends BaseController{ + @Autowired + private UserRoleService userRoleService; + + + @ApiOperation(value = "更新用户角色权限", notes = "更新用户角色权限") + @PostMapping("/update") + @PreAuthorize("hasAnyAuthority('sys:userRole:update')") + public Result updateUR(@RequestBody @Valid UserRoleUpdateBo bo){ + Result result; + try { + userRoleService.updateUR(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "新增用户角色权限", notes = "新增用户角色权限") + @PostMapping("/save") + @PreAuthorize("hasAnyAuthority('sys:userRole:save')") + public Result saveUR(@RequestBody @Valid UserRoleSaveBo bo){ + Result result; + try { + userRoleService.saveUR(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } + + @ApiOperation(value = "删除用户角色权限", notes = "删除用户角色权限") + @DeleteMapping("/del") + @PreAuthorize("hasAnyAuthority('sys:userRole:del')") + public Result delUR(@RequestBody @Valid UserRoleDelBo bo){ + Result result; + try { + userRoleService.delUR(bo); + result = new Result(ConstantEnum.SUCCESS); + } catch (PlatformException e) { + log.error("error info:",e); + result = new Result(e.getErrorCode(), e.getErrorMessage()); + } catch (Exception e) { + log.error("error info:",e); + result = new Result(ConstantEnum.FAIL); + } + return result; + } +} + diff --git a/src/main/java/org/micai/platform/auth/dto/UserAuthenticationDto.java b/src/main/java/org/micai/platform/auth/dto/UserAuthenticationDto.java index cab10c5692239b532792eadfc68d3cbd3d4a979f..70b2701880cc3ca182cd7dd8ea42ada4fa422038 100644 --- a/src/main/java/org/micai/platform/auth/dto/UserAuthenticationDto.java +++ b/src/main/java/org/micai/platform/auth/dto/UserAuthenticationDto.java @@ -2,7 +2,6 @@ package org.micai.platform.auth.dto; import io.swagger.annotations.ApiModel; import lombok.Data; -import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import java.util.List; @@ -15,7 +14,6 @@ import java.util.List; */ @ApiModel(value = "获取用户的角色/权限的实体") @Data -@EqualsAndHashCode(callSuper = false) @Accessors(chain = true) public class UserAuthenticationDto { diff --git a/src/main/java/org/micai/platform/auth/entity/OrganUser.java b/src/main/java/org/micai/platform/auth/entity/OrganUser.java index 18e160a9ae746f0eee0015553f83b08442dc6104..bd5b74d64e4402bde4f468099fec0bf8a1c7773a 100644 --- a/src/main/java/org/micai/platform/auth/entity/OrganUser.java +++ b/src/main/java/org/micai/platform/auth/entity/OrganUser.java @@ -1,9 +1,6 @@ package org.micai.platform.auth.entity; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -29,8 +26,10 @@ public class OrganUser implements Serializable { private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @ApiModelProperty(value = "组织机构id") - @TableId(value = "organ_id", type = IdType.AUTO) private Long organId; @ApiModelProperty(value = "用户id") @@ -43,5 +42,15 @@ public class OrganUser implements Serializable { @TableField(fill = FieldFill.INSERT) private Date createTime; + @ApiModelProperty(value = "修改用户id") + private Long updateUserId; + + @ApiModelProperty(value = "修改时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + @ApiModelProperty(value = "版本") + @Version + @TableField(fill = FieldFill.UPDATE, condition = SqlCondition.EQUAL) + private Long version; } diff --git a/src/main/java/org/micai/platform/auth/entity/PermissionMenu.java b/src/main/java/org/micai/platform/auth/entity/PermissionMenu.java index 7e8149d02d1ec325ba70f18b7d35c825d29ecc24..3518962d513ab44bbdf39b8260bd580e48094cf5 100644 --- a/src/main/java/org/micai/platform/auth/entity/PermissionMenu.java +++ b/src/main/java/org/micai/platform/auth/entity/PermissionMenu.java @@ -1,7 +1,6 @@ package org.micai.platform.auth.entity; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,6 +26,9 @@ public class PermissionMenu implements Serializable { private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @ApiModelProperty(value = "权限id") private Long permissionId; @@ -40,5 +42,15 @@ public class PermissionMenu implements Serializable { @TableField(fill = FieldFill.INSERT) private Date createTime; + @ApiModelProperty(value = "修改用户id") + private Long updateUserId; + + @ApiModelProperty(value = "修改时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + @ApiModelProperty(value = "版本") + @Version + @TableField(fill = FieldFill.UPDATE, condition = SqlCondition.EQUAL) + private Long version; } diff --git a/src/main/java/org/micai/platform/auth/entity/RolePermission.java b/src/main/java/org/micai/platform/auth/entity/RolePermission.java index d51e43dacbc7af930b57c521c5fdd29e926f8677..8ce4d261d0ce9afa0c9ce63363e9f73b6974cdac 100644 --- a/src/main/java/org/micai/platform/auth/entity/RolePermission.java +++ b/src/main/java/org/micai/platform/auth/entity/RolePermission.java @@ -1,7 +1,6 @@ package org.micai.platform.auth.entity; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,6 +26,9 @@ public class RolePermission implements Serializable { private static final long serialVersionUID = 1L; + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @ApiModelProperty(value = "角色id") private Long roleId; @@ -40,5 +42,15 @@ public class RolePermission implements Serializable { @TableField(fill = FieldFill.INSERT) private Date createTime; + @ApiModelProperty(value = "修改用户id") + private Long updateUserId; + + @ApiModelProperty(value = "修改时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + @ApiModelProperty(value = "版本") + @Version + @TableField(fill = FieldFill.UPDATE, condition = SqlCondition.EQUAL) + private Long version; } diff --git a/src/main/java/org/micai/platform/auth/entity/UserRole.java b/src/main/java/org/micai/platform/auth/entity/UserRole.java index f68b17e32a45d7c59aad86c064a57e94e22b2d96..9eb02bac708d91ef33974ede2e500c6c40d93cc2 100644 --- a/src/main/java/org/micai/platform/auth/entity/UserRole.java +++ b/src/main/java/org/micai/platform/auth/entity/UserRole.java @@ -1,7 +1,6 @@ package org.micai.platform.auth.entity; -import com.baomidou.mybatisplus.annotation.FieldFill; -import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.*; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,18 +26,32 @@ public class UserRole implements Serializable { private static final long serialVersionUID = 1L; + @ApiModelProperty(value = "主键id") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + @ApiModelProperty(value = "用户id") private Long userId; @ApiModelProperty(value = "角色id") private Long roleId; - @ApiModelProperty(value = "创建人id") + @ApiModelProperty(value = "创建用户id") private Long creatUserId; @ApiModelProperty(value = "创建时间") @TableField(fill = FieldFill.INSERT) private Date createTime; + @ApiModelProperty(value = "修改用户id") + private Long updateUserId; + + @ApiModelProperty(value = "修改时间") + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + @ApiModelProperty(value = "版本") + @Version + @TableField(fill = FieldFill.UPDATE, condition = SqlCondition.EQUAL) + private Long version; } diff --git a/src/main/java/org/micai/platform/auth/filter/ImageCodeValidateFilter.java b/src/main/java/org/micai/platform/auth/filter/ImageCodeValidateFilter.java new file mode 100644 index 0000000000000000000000000000000000000000..6d733b8e23396f9df12c2eeba59f1177196b4da9 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/filter/ImageCodeValidateFilter.java @@ -0,0 +1,52 @@ +package org.micai.platform.auth.filter; + +import cn.hutool.core.util.ObjectUtil; +import org.micai.platform.auth.base.exception.MyAuthException; +import org.micai.platform.auth.constant.ConstantCode; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.handler.CustomAuthenticationFailureHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +/** + * @Author liuCong + * @Date 2022/1/4 11:25 + * @ClassName ImageCodeValidateFilter + * @Description + */ +@Component +public class ImageCodeValidateFilter extends OncePerRequestFilter { + @Autowired + private CustomAuthenticationFailureHandler customAuthenticationFailureHandler; + + @Value("${image.code.flag}") + private boolean imageCodeFlag; + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + try { + if (imageCodeFlag){ + String code = request.getParameter(ConstantCode.IMAGE_CODE); + if (ObjectUtil.isEmpty(code)) { + throw new MyAuthException(ConstantEnum.IMAGE_ERROR); + } + String imageCode = (String) request.getSession().getAttribute(ConstantCode.SESSION_KEY); + if (ObjectUtil.isEmpty(imageCode) && !imageCode.equals(code)){ + throw new MyAuthException(ConstantEnum.IMAGE_ERROR); + } + } + } catch (MyAuthException e) { + customAuthenticationFailureHandler.onAuthenticationFailure(request,response,e); + } + + filterChain.doFilter(request,response); + } +} diff --git a/src/main/java/org/micai/platform/auth/filter/JWTAuthenticationFilter.java b/src/main/java/org/micai/platform/auth/filter/JWTAuthenticationFilter.java index d9870e5726b0d272d5e70f477cced81d01460414..120042068b3710baa352b9e8d53c495eebc49dbf 100644 --- a/src/main/java/org/micai/platform/auth/filter/JWTAuthenticationFilter.java +++ b/src/main/java/org/micai/platform/auth/filter/JWTAuthenticationFilter.java @@ -19,10 +19,7 @@ import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.ArrayList; -import java.util.Calendar; -import java.util.Date; -import java.util.List; +import java.util.*; /** * 自定义JWT认证过滤器 @@ -82,7 +79,7 @@ public class JWTAuthenticationFilter extends BasicAuthenticationFilter { // 设置签发时间 calendar.setTime(new Date()); // 设置过期时间 - calendar.add(Calendar.MINUTE, 15);// 5分钟 + calendar.add(Calendar.MINUTE, Long.bitCount(expirationTime)); Date time = calendar.getTime(); String refreshToken = Jwts.builder() .setSubject(claims.getSubject()) diff --git a/src/main/java/org/micai/platform/auth/filter/JWTLoginFilter.java b/src/main/java/org/micai/platform/auth/filter/JWTLoginFilter.java index 1e986b54252abdcf35bdcb80dbb6f79a650ca35e..366582bf34618bb886151d293795a867c9324841 100644 --- a/src/main/java/org/micai/platform/auth/filter/JWTLoginFilter.java +++ b/src/main/java/org/micai/platform/auth/filter/JWTLoginFilter.java @@ -5,11 +5,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.bo.UserQueryBo; import org.micai.platform.auth.constant.ConstantCode; import org.micai.platform.auth.constant.ConstantEnum; -import org.micai.platform.auth.base.exception.PlatformException; -import org.micai.platform.auth.bo.UserQueryBo; -import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.handler.CustomAuthenticationFailureHandler; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; @@ -39,10 +39,17 @@ public class JWTLoginFilter extends UsernamePasswordAuthenticationFilter { private final AuthenticationManager authenticationManager; private final String signKey; - - public JWTLoginFilter(AuthenticationManager authenticationManager, String signKey) { + + private final int expirationTime; + + private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; + + public JWTLoginFilter(AuthenticationManager authenticationManager, String signKey, int expirationTime, + CustomAuthenticationFailureHandler customAuthenticationFailureHandler) { this.authenticationManager = authenticationManager; this.signKey = signKey; + this.expirationTime = expirationTime; + this.customAuthenticationFailureHandler = customAuthenticationFailureHandler; } /** @@ -53,32 +60,29 @@ public class JWTLoginFilter extends UsernamePasswordAuthenticationFilter { * @throws AuthenticationException */ @Override - public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res) throws AuthenticationException { + public Authentication attemptAuthentication(HttpServletRequest req, HttpServletResponse res) { Authentication authenticate = null; try { - UserQueryBo userQueryBo = new ObjectMapper().readValue(req.getInputStream(), UserQueryBo.class); + Map requestMap = new ObjectMapper().readValue(req.getInputStream(), HashMap.class); + UserQueryBo userQueryBo = new UserQueryBo() + .setUsername(requestMap.get(ConstantCode.USERNAME)) + .setPassword(requestMap.get(ConstantCode.PASSWORD)); authenticate = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken( userQueryBo.getUsername(), userQueryBo.getPassword(), new ArrayList<>()) ); - } catch (IOException e) { - log.error("IOException:", e); - } catch (PlatformException e) { + }catch (AuthenticationException e) { try { - // 捕获权限异常返回到前端的body里面 - res.setStatus(HttpServletResponse.SC_FORBIDDEN); - res.setContentType(ConstantCode.CONTENT_TYPE_JSON); - Result result = new Result(e.getErrorCode(),e.getErrorMessage()); - PrintWriter out = res.getWriter(); - out.write(new ObjectMapper().writeValueAsString(result)); - out.flush(); - out.close(); - } catch (IOException ee) { - log.error("IOException:", ee); + customAuthenticationFailureHandler.onAuthenticationFailure(req,res,e); + } catch (IOException ex) { + log.error("IOException:", ex); + } catch (ServletException ex) { + log.error("ServletException:", ex); } } catch (Exception e) { + log.error("Exception:", e); try { // 捕获权限异常返回到前端的body里面 res.setStatus(HttpServletResponse.SC_BAD_REQUEST); @@ -125,7 +129,7 @@ public class JWTLoginFilter extends UsernamePasswordAuthenticationFilter { // 设置签发时间 calendar.setTime(new Date()); // 设置过期时间 - calendar.add(Calendar.MINUTE, 120);// 5分钟 + calendar.add(Calendar.MINUTE, expirationTime);// 5分钟 Date time = calendar.getTime(); String rolesStr = JSON.toJSONString(roleList); token = Jwts.builder() diff --git a/src/main/java/org/micai/platform/auth/handler/CustomAuthenticationFailureHandler.java b/src/main/java/org/micai/platform/auth/handler/CustomAuthenticationFailureHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..8e40cb27b7766c566087abf63492edd6cc572093 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/handler/CustomAuthenticationFailureHandler.java @@ -0,0 +1,34 @@ +package org.micai.platform.auth.handler; + +import com.fasterxml.jackson.databind.ObjectMapper; +import org.micai.platform.auth.base.result.Result; +import org.micai.platform.auth.constant.ConstantCode; +import org.springframework.security.core.AuthenticationException; +import org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler; +import org.springframework.stereotype.Component; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.io.PrintWriter; + +/** + * @Author liuCong + * @Date 2022/1/4 17:20 + * @ClassName CustomAuthenticationFailureHandler + * @Description + */ +@Component +public class CustomAuthenticationFailureHandler extends SimpleUrlAuthenticationFailureHandler { + @Override + public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException { + response.setStatus(HttpServletResponse.SC_UNAUTHORIZED); + response.setContentType(ConstantCode.CONTENT_TYPE_JSON); + Result result = new Result(HttpServletResponse.SC_UNAUTHORIZED,exception.getMessage()); + PrintWriter out = response.getWriter(); + out.write(new ObjectMapper().writeValueAsString(result)); + out.flush(); + out.close(); + } +} diff --git a/src/main/java/org/micai/platform/auth/interceptor/MybatisPlusInterceptor.java b/src/main/java/org/micai/platform/auth/interceptor/PlusInterceptor.java similarity index 31% rename from src/main/java/org/micai/platform/auth/interceptor/MybatisPlusInterceptor.java rename to src/main/java/org/micai/platform/auth/interceptor/PlusInterceptor.java index 86786991f1f859b329384856e15315d85674962f..fa3787e1319f06152ef5f9b4b201b577d6b91fb2 100644 --- a/src/main/java/org/micai/platform/auth/interceptor/MybatisPlusInterceptor.java +++ b/src/main/java/org/micai/platform/auth/interceptor/PlusInterceptor.java @@ -1,7 +1,11 @@ package org.micai.platform.auth.interceptor; -import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; /** * @Author liuCong @@ -9,12 +13,13 @@ import org.springframework.context.annotation.Bean; * @ClassName MybatisPlusInterceptor * @Description */ -public class MybatisPlusInterceptor { +@Configuration +public class PlusInterceptor { @Bean - public com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor mybatisPlusInterceptor() { - com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor interceptor = new com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor(); - interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); return interceptor; } } diff --git a/src/main/java/org/micai/platform/auth/provider/CustomAuthenticationProvider.java b/src/main/java/org/micai/platform/auth/provider/CustomAuthenticationProvider.java index e95cbe20dce666b7c84a2d03ea43906e92bfa332..425bd4e5f984ea3cfe24842f3f7c57240d681fc1 100644 --- a/src/main/java/org/micai/platform/auth/provider/CustomAuthenticationProvider.java +++ b/src/main/java/org/micai/platform/auth/provider/CustomAuthenticationProvider.java @@ -3,10 +3,10 @@ package org.micai.platform.auth.provider; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import lombok.extern.slf4j.Slf4j; +import org.micai.platform.auth.base.exception.MyAuthException; import org.micai.platform.auth.constant.ConstantCode; import org.micai.platform.auth.constant.ConstantEnum; import org.micai.platform.auth.entity.*; -import org.micai.platform.auth.base.exception.PlatformException; import org.micai.platform.auth.service.*; import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -74,55 +74,53 @@ public class CustomAuthenticationProvider implements AuthenticationProvider { /*UserDetails userDetails = userDetailsService.loadUserByUsername(name);*/ User userDetails = userService.findByUsername(name); if (ObjectUtil.isEmpty(userDetails)) { - throw new PlatformException(ConstantEnum.USER_CODE_ERROR); + throw new MyAuthException(ConstantEnum.USER_CODE_ERROR); } if (!bCryptPasswordEncoder.matches(password, userDetails.getPassword())) { - throw new PlatformException(ConstantEnum.USER_CODE_ERROR); + throw new MyAuthException(ConstantEnum.USER_CODE_ERROR); } //获取用户权限 List userRoleList = userRoleService.list(new QueryWrapper().lambda().eq(UserRole::getUserId,userDetails.getId())); if (ObjectUtil.isEmpty(userRoleList)){ - throw new PlatformException(ConstantEnum.NO_ROLE); + throw new MyAuthException(ConstantEnum.NO_ROLE); } List roleIdList = userRoleList.stream().map(UserRole::getRoleId).collect(Collectors.toList()); List roleList = roleService.list(new QueryWrapper().lambda() .in(Role::getId,roleIdList).eq(Role::getStatus,ConstantCode.STR_Z_ONE)); if (ObjectUtil.isEmpty(roleList)){ - throw new PlatformException(ConstantEnum.NO_ROLE); + throw new MyAuthException(ConstantEnum.NO_ROLE); } List rolePermissionList = rolePermissionService.list(new QueryWrapper().lambda() .in(RolePermission::getRoleId,roleIdList)); if (ObjectUtil.isEmpty(rolePermissionList)){ - throw new PlatformException(ConstantEnum.NO_PERMISSION); + throw new MyAuthException(ConstantEnum.NO_PERMISSION); } List permissionIdList = rolePermissionList.stream().map(RolePermission::getPermissionId).collect(Collectors.toList()); List permissionList = permissionService.list(new QueryWrapper().lambda() .in(Permission::getId,permissionIdList).eq(Permission::getStatus,ConstantCode.STR_Z_ONE)); if (ObjectUtil.isEmpty(permissionList)){ - throw new PlatformException(ConstantEnum.NO_PERMISSION); + throw new MyAuthException(ConstantEnum.NO_PERMISSION); } StringBuilder roleStr = new StringBuilder(); - for (int i = 0; i < roleList.size(); i++) { - roleStr.append(ConstantCode.DEFAULT_ROLE_PREFIX).append(roleList.get(i).getRoleCode()); - if (i != (roleList.size() - 1)){ - roleStr.append(ConstantCode.SEPARATOR); - } + for (Role role : roleList) { + roleStr.append(ConstantCode.DEFAULT_ROLE_PREFIX).append(role.getRoleCode()); + roleStr.append(ConstantCode.SEPARATOR); } StringBuilder permissionStr = new StringBuilder(); for (int i = 0; i < permissionList.size(); i++) { permissionStr.append(permissionList.get(i).getPermissionCode()); - if (i != (roleList.size() - 1 )){ + if ((permissionList.size() - 1) != i){ permissionStr.append(ConstantCode.SEPARATOR); } } - String authStr = roleStr.append(ConstantCode.SEPARATOR).append(permissionStr).toString(); + String authStr = roleStr.append(permissionStr).toString(); // 这里设置权限和角色 List grantedAuthorities = AuthorityUtils.commaSeparatedStringToAuthorityList(authStr); // 生成令牌 这里令牌里面存入了:name,password,authorities, 当然你也可以放其他内容 name = userDetails.getId() + "-" + name; - log.info("权限:{} , 角色:{} , 用户:{}",permissionStr,roleStr,name); + log.info("authStr:{} , 用户:{}", authStr, name); return new UsernamePasswordAuthenticationToken(name, password, grantedAuthorities); } diff --git a/src/main/java/org/micai/platform/auth/service/PermissionMenuService.java b/src/main/java/org/micai/platform/auth/service/PermissionMenuService.java new file mode 100644 index 0000000000000000000000000000000000000000..68688ce6398bab193075995596531064ff8e0e5e --- /dev/null +++ b/src/main/java/org/micai/platform/auth/service/PermissionMenuService.java @@ -0,0 +1,19 @@ +package org.micai.platform.auth.service; + +import org.micai.platform.auth.bo.PermissionMenuDelBo; +import org.micai.platform.auth.bo.PermissionMenuSaveBo; +import org.micai.platform.auth.bo.PermissionMenuUpdateBo; + +/** + * @Author liuCong + * @Date 2022/1/13 16:54 + * @ClassName PermissionMenuService + * @Description + */ +public interface PermissionMenuService { + void updatePM(PermissionMenuUpdateBo bo) throws Exception; + + void savePM(PermissionMenuSaveBo bo) throws Exception; + + void delPM(PermissionMenuDelBo bo) throws Exception; +} diff --git a/src/main/java/org/micai/platform/auth/service/RolePermissionService.java b/src/main/java/org/micai/platform/auth/service/RolePermissionService.java index 6f1d1c124a6ea88f8c63fd836af2937af474b707..e1697c83ed266cb28c859389e89f56d70b071086 100644 --- a/src/main/java/org/micai/platform/auth/service/RolePermissionService.java +++ b/src/main/java/org/micai/platform/auth/service/RolePermissionService.java @@ -1,5 +1,8 @@ package org.micai.platform.auth.service; +import org.micai.platform.auth.bo.RolePermissionDelBo; +import org.micai.platform.auth.bo.RolePermissionSaveBo; +import org.micai.platform.auth.bo.RolePermissionUpdateBo; import org.micai.platform.auth.entity.RolePermission; import com.baomidou.mybatisplus.extension.service.IService; @@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface RolePermissionService extends IService { + void updateRP(RolePermissionUpdateBo bo) throws Exception; + + void saveRP(RolePermissionSaveBo bo) throws Exception; + + void delRP(RolePermissionDelBo bo) throws Exception; } diff --git a/src/main/java/org/micai/platform/auth/service/UserRoleService.java b/src/main/java/org/micai/platform/auth/service/UserRoleService.java index c76a69ee03101de60ed3953a7b9d88bec655a48f..45ce2f08ed177b87894796689db90aa21236dc10 100644 --- a/src/main/java/org/micai/platform/auth/service/UserRoleService.java +++ b/src/main/java/org/micai/platform/auth/service/UserRoleService.java @@ -1,5 +1,8 @@ package org.micai.platform.auth.service; +import org.micai.platform.auth.bo.UserRoleDelBo; +import org.micai.platform.auth.bo.UserRoleSaveBo; +import org.micai.platform.auth.bo.UserRoleUpdateBo; import org.micai.platform.auth.entity.UserRole; import com.baomidou.mybatisplus.extension.service.IService; @@ -13,4 +16,9 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface UserRoleService extends IService { + void updateUR(UserRoleUpdateBo bo) throws Exception; + + void saveUR(UserRoleSaveBo bo) throws Exception; + + void delUR(UserRoleDelBo bo) throws Exception; } diff --git a/src/main/java/org/micai/platform/auth/service/impl/PermissionMenuServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/PermissionMenuServiceImpl.java new file mode 100644 index 0000000000000000000000000000000000000000..5bf5a2fbd605d447d10a0b5463752101e9a5a0f6 --- /dev/null +++ b/src/main/java/org/micai/platform/auth/service/impl/PermissionMenuServiceImpl.java @@ -0,0 +1,73 @@ +package org.micai.platform.auth.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.bo.PermissionMenuDelBo; +import org.micai.platform.auth.bo.PermissionMenuSaveBo; +import org.micai.platform.auth.bo.PermissionMenuUpdateBo; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.dto.UserAuthenticationDto; +import org.micai.platform.auth.entity.PermissionMenu; +import org.micai.platform.auth.mapper.PermissionMenuMapper; +import org.micai.platform.auth.service.PermissionMenuService; +import org.micai.platform.auth.utils.AuthenticationManger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +/** + * @Author liuCong + * @Date 2022/1/13 16:54 + * @ClassName PermissionMenuServiceImpl + * @Description + */ +@Service +public class PermissionMenuServiceImpl extends ServiceImpl implements PermissionMenuService { + @Autowired + private PermissionMenuMapper permissionMenuMapper; + + @Override + public void updatePM(PermissionMenuUpdateBo bo) throws Exception { + PermissionMenu permissionMenu = BeanUtil.copyProperties(bo, PermissionMenu.class); + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + permissionMenu.setUpdateUserId(authentication.getId()); + PermissionMenu permissionMenuEn = permissionMenuMapper.selectById(permissionMenu.getId()); + permissionMenu.setVersion(permissionMenuEn.getVersion()); + permissionMenuMapper.updateById(permissionMenu); + } + + @Override + public void savePM(PermissionMenuSaveBo bo) throws Exception { + PermissionMenu permissionMenu = BeanUtil.copyProperties(bo, PermissionMenu.class); + + //不能有重复的 + List permissionMenus = permissionMenuMapper.selectList(new QueryWrapper().lambda() + .eq(PermissionMenu::getPermissionId, bo.getPermissionId()) + .eq(PermissionMenu::getMenuId, bo.getMenuId())); + + if (ObjectUtil.isNotEmpty(permissionMenus)) { + throw new PlatformException(ConstantEnum.DATA_DUPLICATION); + } + + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + permissionMenu + .setCreateUserId(authentication.getId()) + .setUpdateUserId(authentication.getId()); + permissionMenuMapper.insert(permissionMenu); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delPM(PermissionMenuDelBo bo) throws Exception { + List idList = bo.getIdList(); + int deleteBatchIds = permissionMenuMapper.deleteBatchIds(idList); + if (idList.size() != deleteBatchIds){ + throw new PlatformException(ConstantEnum.UPDATE_ERROR); + } + } +} diff --git a/src/main/java/org/micai/platform/auth/service/impl/PermissionServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/PermissionServiceImpl.java index 0c7c3b5f1026677a39f057b700ee76eb3eac6bd3..b5aa464d9ec55b2912b4f849b41f14d19786d7d6 100644 --- a/src/main/java/org/micai/platform/auth/service/impl/PermissionServiceImpl.java +++ b/src/main/java/org/micai/platform/auth/service/impl/PermissionServiceImpl.java @@ -2,10 +2,10 @@ package org.micai.platform.auth.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.RandomUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.micai.platform.auth.base.exception.PlatformException; import org.micai.platform.auth.bo.PermissionDelBo; import org.micai.platform.auth.bo.PermissionFindBo; import org.micai.platform.auth.bo.PermissionSaveBo; @@ -14,7 +14,6 @@ import org.micai.platform.auth.constant.ConstantCode; import org.micai.platform.auth.constant.ConstantEnum; import org.micai.platform.auth.dto.UserAuthenticationDto; import org.micai.platform.auth.entity.Permission; -import org.micai.platform.auth.base.exception.PlatformException; import org.micai.platform.auth.mapper.PermissionMapper; import org.micai.platform.auth.service.PermissionService; import org.micai.platform.auth.utils.AuthenticationManger; @@ -68,10 +67,10 @@ public class PermissionServiceImpl extends ServiceImpl @@ -16,5 +30,46 @@ import org.springframework.stereotype.Service; */ @Service public class RolePermissionServiceImpl extends ServiceImpl implements RolePermissionService { + @Autowired + private RolePermissionMapper rolePermissionMapper; + + @Override + public void updateRP(RolePermissionUpdateBo bo) throws Exception { + RolePermission rolePermission = BeanUtil.copyProperties(bo, RolePermission.class); + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + rolePermission.setUpdateUserId(authentication.getId()); + RolePermission rolePermissionEn = rolePermissionMapper.selectById(rolePermission.getId()); + rolePermission.setVersion(rolePermissionEn.getVersion()); + rolePermissionMapper.updateById(rolePermission); + } + + @Override + public void saveRP(RolePermissionSaveBo bo) throws Exception { + RolePermission rolePermission = BeanUtil.copyProperties(bo, RolePermission.class); + + //不能有重复的 + List rolePermissions = rolePermissionMapper.selectList(new QueryWrapper().lambda() + .eq(RolePermission::getPermissionId, bo.getPermissionId()) + .eq(RolePermission::getRoleId, bo.getRoleId())); + + if (ObjectUtil.isNotEmpty(rolePermissions)) { + throw new PlatformException(ConstantEnum.DATA_DUPLICATION); + } + + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + rolePermission + .setCreateUserId(authentication.getId()) + .setUpdateUserId(authentication.getId()); + rolePermissionMapper.insert(rolePermission); + } + @Override + @Transactional(rollbackFor = Exception.class) + public void delRP(RolePermissionDelBo bo) throws Exception { + List idList = bo.getIdList(); + int deleteBatchIds = rolePermissionMapper.deleteBatchIds(idList); + if (idList.size() != deleteBatchIds){ + throw new PlatformException(ConstantEnum.UPDATE_ERROR); + } + } } diff --git a/src/main/java/org/micai/platform/auth/service/impl/RoleServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/RoleServiceImpl.java index 8e7c88dc0901c6aeeabc52261bf9e682fd607e5a..4f7d4126a7a5c6e51464cd094dfdccf8b89c1e02 100644 --- a/src/main/java/org/micai/platform/auth/service/impl/RoleServiceImpl.java +++ b/src/main/java/org/micai/platform/auth/service/impl/RoleServiceImpl.java @@ -68,10 +68,10 @@ public class RoleServiceImpl extends ServiceImpl implements Ro public void saveRole(RoleSaveBo bo) throws Exception { Role role = BeanUtil.copyProperties(bo, Role.class); UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); - role.setRoleCode(RandomUtil.randomString(ConstantCode.INT_TEN)); - role.setCreateUserId(authentication.getId()); - role.setUpdateUserId(authentication.getId()); - role.setStatus(ConstantCode.STR_Z_ONE); + role.setRoleCode(RandomUtil.randomString(ConstantCode.INT_TEN)) + .setCreateUserId(authentication.getId()) + .setUpdateUserId(authentication.getId()) + .setStatus(ConstantCode.STR_Z_ONE); int i = roleMapper.insert(role); if (ConstantCode.INT_ONE != i){ throw new PlatformException(ConstantEnum.UPDATE_ERROR); diff --git a/src/main/java/org/micai/platform/auth/service/impl/SysMenuServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/SysMenuServiceImpl.java index f12f6eaa48238f837f4b34898ae4a10230cea44d..8edcb2d4a9bed483734d9afc6fa1c64b6822bcb3 100644 --- a/src/main/java/org/micai/platform/auth/service/impl/SysMenuServiceImpl.java +++ b/src/main/java/org/micai/platform/auth/service/impl/SysMenuServiceImpl.java @@ -106,10 +106,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl public void saveMenu(MenuSaveBo bo) throws Exception { SysMenu sysMenu = BeanUtil.copyProperties(bo, SysMenu.class); UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); - sysMenu.setMenuCode(RandomUtil.randomString(ConstantCode.INT_TEN)); - sysMenu.setCreateUserId(authentication.getId()); - sysMenu.setUpdateUserId(authentication.getId()); - sysMenu.setStatus(ConstantCode.STR_Z_ONE); + sysMenu.setMenuCode(RandomUtil.randomString(ConstantCode.INT_TEN)) + .setCreateUserId(authentication.getId()) + .setUpdateUserId(authentication.getId()) + .setStatus(ConstantCode.STR_Z_ONE); int i = sysMenuMapper.insert(sysMenu); if (ConstantCode.INT_ONE != i){ throw new PlatformException(ConstantEnum.UPDATE_ERROR); diff --git a/src/main/java/org/micai/platform/auth/service/impl/UserRoleServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/UserRoleServiceImpl.java index d8d89a2501bafc7dcb847e69608502806e2254d1..c9d7a45570fe4d79b562199a7062655375623f49 100644 --- a/src/main/java/org/micai/platform/auth/service/impl/UserRoleServiceImpl.java +++ b/src/main/java/org/micai/platform/auth/service/impl/UserRoleServiceImpl.java @@ -1,10 +1,24 @@ package org.micai.platform.auth.service.impl; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.micai.platform.auth.base.exception.PlatformException; +import org.micai.platform.auth.bo.UserRoleDelBo; +import org.micai.platform.auth.bo.UserRoleSaveBo; +import org.micai.platform.auth.bo.UserRoleUpdateBo; +import org.micai.platform.auth.constant.ConstantEnum; +import org.micai.platform.auth.dto.UserAuthenticationDto; import org.micai.platform.auth.entity.UserRole; import org.micai.platform.auth.mapper.UserRoleMapper; import org.micai.platform.auth.service.UserRoleService; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.micai.platform.auth.utils.AuthenticationManger; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; /** *

@@ -17,4 +31,45 @@ import org.springframework.stereotype.Service; @Service public class UserRoleServiceImpl extends ServiceImpl implements UserRoleService { + @Autowired + private UserRoleMapper userRoleMapper; + + @Override + public void updateUR(UserRoleUpdateBo bo) throws Exception { + UserRole userRole = BeanUtil.copyProperties(bo, UserRole.class); + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + userRole.setUpdateUserId(authentication.getId()); + UserRole userRoleEn = userRoleMapper.selectById(userRole.getId()); + userRole.setVersion(userRoleEn.getVersion()); + userRoleMapper.updateById(userRole); + } + + @Override + public void saveUR(UserRoleSaveBo bo) throws Exception { + UserRole userRole = BeanUtil.copyProperties(bo, UserRole.class); + + //不能有重复的 + List userRoles = userRoleMapper.selectList(new QueryWrapper().lambda() + .eq(UserRole::getUserId, bo.getUserId()) + .eq(UserRole::getRoleId, bo.getRoleId())); + + if (ObjectUtil.isNotEmpty(userRoles)) { + throw new PlatformException(ConstantEnum.DATA_DUPLICATION); + } + + UserAuthenticationDto authentication = AuthenticationManger.getAuthentication(); + userRole.setCreatUserId(authentication.getId()) + .setUpdateUserId(authentication.getId()); + userRoleMapper.insert(userRole); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delUR(UserRoleDelBo bo) throws Exception { + List idList = bo.getIdList(); + int deleteBatchIds = userRoleMapper.deleteBatchIds(idList); + if (idList.size() != deleteBatchIds){ + throw new PlatformException(ConstantEnum.UPDATE_ERROR); + } + } } diff --git a/src/main/java/org/micai/platform/auth/service/impl/UserServiceImpl.java b/src/main/java/org/micai/platform/auth/service/impl/UserServiceImpl.java index d85bc903a7abfd980b292b6e8f2fe5fe35ebd1ae..a81eed7cdbe9c24fe5475878df7cc2c917b0762d 100644 --- a/src/main/java/org/micai/platform/auth/service/impl/UserServiceImpl.java +++ b/src/main/java/org/micai/platform/auth/service/impl/UserServiceImpl.java @@ -95,10 +95,10 @@ public class UserServiceImpl extends ServiceImpl implements Us //生成7位随机密码 String password = RandomUtil.randomString(ConstantCode.INT_SEVEN); String encodePass = bCryptPasswordEncoder.encode(password); - user.setPassword(encodePass); - user.setCreateUserId(id); - user.setUpdateUserId(id); - user.setStatus(ConstantCode.STR_Z_ONE); + user.setPassword(encodePass) + .setCreateUserId(id) + .setUpdateUserId(id) + .setStatus(ConstantCode.STR_Z_ONE); int i = userMapper.insert(user); if (ConstantCode.INT_ONE != i){ throw new PlatformException(ConstantEnum.UPDATE_ERROR); diff --git a/src/main/java/org/micai/platform/auth/utils/MD5.java b/src/main/java/org/micai/platform/auth/utils/MD5.java index 939967231d47a49bc5a8d236a05a4c2cb1ac0241..5a3ecc8647628765ad9d8154c1b0c02c4c67c84d 100644 --- a/src/main/java/org/micai/platform/auth/utils/MD5.java +++ b/src/main/java/org/micai/platform/auth/utils/MD5.java @@ -47,7 +47,7 @@ public class MD5 { try { code = MessageDigest.getInstance("md5").digest(bytes); } catch (NoSuchAlgorithmException e) { - throw new PlatformException(e.getMessage()); + throw new PlatformException(e); } BigInteger bi = new BigInteger(code); return bi.abs().toString(32).toUpperCase(); diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index cf001c89be519ea95d96340aa55981c9a7ad079c..5ce3322211ca9b40c7f860fe6f6cc09ebc516912 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -10,6 +10,16 @@ spring: username: root password: root -#签名key -sign: - key: spring-security-@Jwt!&Secret^# \ No newline at end of file +#jwt相关配置 +jwt: + #sign key + sign: + key: spring-security-@Jwt!&Secret^# + #jwt 过期时间 + expiration: + time: 15 + +#登录是否开启图形验证码功能 +image: + code: + flag: true \ No newline at end of file