æ¾å¥æè¿æ£å¨å½å¶ TienChin 项ç®è§é¢ï½éç¨ Spring Boot+Vue3 ææ¯æ ï¼éè¾¹ä¼æ¶åå°åç§å¥½ç©çææ¯ï¼å°ä¼ä¼´ä»¬æ¥åæ¾å¥ä¸èµ·åä¸ä¸ªå®æçè¶ 90% ç项ç®ï¼æ³æ³æ³è¿é-->TienChin 项ç®é å¥è§é¢æ¥å¦ã
- 1. æéé¢ç²åº¦
- 2. æé表
- 3. å端æé夿
å 为åäºä¸å° Spring Security æç« çç¼æ ï¼æä»¥æ»æ¯æå°ä¼ä¼´æ¥é®æ¾å¥ï¼æé®çº§å«çæéæä¹å®ç°ï¼çè³æä¸äºçè¿ vhr çå°ä¼ä¼´ä¹é®è¿ç§é®é¢ï¼å ¶å®æçæ¶åæå¾æç¡®å®æºéé·çï¼æè¿å好è¦å TienChin 项ç®ï¼æå°±åæè¿ä¸ªé®é¢æåºæ¥åå°ä¼ä¼´ä»¬ä»ç»æä¸æã
1. æéé¢ç²åº¦
é¦å å°ä¼ä¼´ä»¬é½ç¥éæéæä¸åçé¢ç²åº¦ï¼å¨ vhr 项ç®ä¸ï¼æ´ä½ä¸ææ¯åºäºè¯·æ±å°åå»å¤çæéçï¼è¿ä¸ªç²åº¦ç®ç²è¿æ¯ç®ç»å¢ï¼
æçå°ä¼ä¼´ä»¬å¯è½è®¤ä¸ºè¿ä¸ªæéç²åº¦å¤ªç²ï¼æè°ç»ç²åº¦çæéåºè¯¥æ¯åºäºæé®çã
妿æå°ä¼ä¼´ä»¬åè¿åå端ä¸åçå¼åï¼åºè¯¥ä¼æè¿æ ·çä½ä¼ï¼å¨ Shiro æè Spring Security æ¡æ¶ä¸ï¼é½æä¾äºä¸äºæ ç¾ï¼éè¿è¿äºæ ç¾å¯ä»¥åå°å¨æ»¡è¶³æç§è§è²æè æéçæ åµä¸ï¼æ¾ç¤ºæä¸ªæé®ï¼å½ç¨æ·ä¸å ·å¤æç§è§è²æè æéçæ¶åï¼æé®åä¼èªå¨éèèµ·æ¥ã
使¯å¤§å®¶æ³æ³ï¼æé®çæ¾ç¤ºä¸éèä¸è¿æ¯å端页é¢ä¸ºäºæé«ç¨æ·ä½éªèä½åºçæ ·å¼çååèå·²ï¼æ¬è´¨ä¸ï¼å½ä½ ç¹å»ä¸ä¸ªæé®çæ¶åï¼è¿æ¯åéäºä¸ä¸ª HTTP 请æ±ï¼é£ä¹æå¡ç«¯å¤ç该请æ±çæ¥å£ï¼å¿ é¡»è¦è¿è¡æéæ§å¶ãæ¢ç¶è¦å¨æ¥å£ä¸è¿è¡æéæ§å¶ï¼é£ä¹è· vhr çåºå«å¨åªéå¢ï¼
ç°å¨æµè¡åå端å离å¼åï¼æä»¥ Shiro æè Spring Security ä¸çé£äºå端æ ç¾ç°å¨åºæ¬ä¸é½ä¸ç¨äºï¼åè代ä¹çåæ³æ¯ç¨æ·å¨ç»å½æåä¹åï¼åæå¡ç«¯åé请æ±ï¼è·åå½åç»å½ç¨æ·çæé以åè§è²ä¿¡æ¯ï¼ç¶åæ ¹æ®è¿äºæéãè§è²çä¿¡æ¯ï¼å¨å端èªå¨çå»å¤æä¸ä¸ªèåæè æé®åºè¯¥æ¯æ¾ç¤ºè¿æ¯éèï¼è¿ä¹åçç®çæ¯ä¸ºäºæé«ç¨æ·ä½éªï¼é¿å ç¨æ·ç¹å»ä¸ä¸ªæ²¡ææéçæé®ãåç«¯çæ¾ç¤ºæè éèä» ä» åªæ¯ä¸ºäºæé«ç¨æ·ä½éªï¼çæ£çæéæ§å¶è¿æ¯è¦å端æ¥åã
å端å¯ä»¥å¨æ¥å£æè ä¸å¡å±å¯¹æéè¿è¡å¤çï¼å ·ä½å¨åªéåï¼å°±è¦çåèªç项ç®äºã
æä»¥ï¼vhr ä¸çæéï¼ä»è®¾è®¡ä¸æ¥è¯´ï¼ç²åº¦å¹¶ä¸ç®ç²ï¼ä¹æ¯ç»ç²åº¦çï¼åªä¸è¿è·èå表æ¾å¨äºä¸èµ·ï¼å°ä¼ä¼´ä»¬å¯è½æè§æç¹ç²ã使¯ï¼èå表æ¯å¯ä»¥ç»§ç»ç»åçï¼æä»¬å¯ä»¥ç»§ç»å¨èåè¡¨ä¸æ·»å æ°çè®°å½ï¼æ°è®°å½ç hidden åæ®µä¸º trueï¼åè忝éèçï¼å°±åçº¯åªæ¯ç»åæéèå·²ã
å¦ä¸å¾å¯ä»¥ç»§ç»æ·»å æ°ç访é®è§åï¼åªä¸è¿æ enabled åæ®µè®¾ç½®ä¸º false å³å¯ï¼è¿æ ·èåå°±ä¸ä¼æ¾ç¤ºåºæ¥äºï¼åçº¯å°±åªæ¯æéçé ç½®ï¼ã

æä»¥ vhr çæéè®¾è®¡æ¯ OK çã
å½ä½ çè§£äº vhr ä¸çæé设计ï¼åæ¥ç TienChin è¿ä¸ªé¡¹ç®ï¼æè 说ç RuoYi-Vue è¿ä¸ªèææ¶ï¼å°±ä¼åç°é常 easy äºã
2. æé表
é¦å æä»¬æ¥ççèµæºè¡¨çå®ä¹ï¼ä¹å°±æ¯
sys_menu
ã
CREATE TABLE `sys_menu` (
`menu_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'èåID',
`menu_name` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT 'èååç§°',
`parent_id` bigint(20) DEFAULT '0' COMMENT 'ç¶èåID',
`order_num` int(4) DEFAULT '0' COMMENT 'æ¾ç¤ºé¡ºåº',
`path` varchar(200) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'è·¯ç±å°å',
`component` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'ç»ä»¶è·¯å¾',
`query` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'è·¯ç±åæ°',
`is_frame` int(1) DEFAULT '1' COMMENT 'æ¯å¦ä¸ºå¤é¾ï¼0æ¯ 1å¦ï¼',
`is_cache` int(1) DEFAULT '0' COMMENT 'æ¯å¦ç¼åï¼0ç¼å 1ä¸ç¼åï¼',
`menu_type` char(1) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'èåç±»åï¼Mç®å½ Cèå Fæé®ï¼',
`visible` char(1) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT 'èåç¶æï¼0æ¾ç¤º 1éèï¼',
`status` char(1) COLLATE utf8mb4_unicode_ci DEFAULT '0' COMMENT 'èåç¶æï¼0æ£å¸¸ 1åç¨ï¼',
`perms` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'æéæ è¯',
`icon` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT '#' COMMENT 'èå徿 ',
`create_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'å建è
',
`create_time` datetime DEFAULT NULL COMMENT 'å建æ¶é´',
`update_by` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT 'æ´æ°è
',
`update_time` datetime DEFAULT NULL COMMENT 'æ´æ°æ¶é´',
`remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '夿³¨',
PRIMARY KEY (`menu_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3054 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='èåæé表';
å¤å¶
å ¶å®è¿éå¾å¤å段é½åæä»¬ vhr 项ç®é¡¹ç®å¾ç¸ä¼¼ï¼æä¹å°±ä¸éå¤å°å¦äºï¼æè¿é主è¦åå°ä¼ä¼´ä»¬è¯´ä¸ä¸ªå段ï¼é£å°±æ¯
menu_type
ã
menu_type
表示ä¸ä¸ªèååæ®µçç±»åï¼ä¸ä¸ªèåæä¸ç§ç±»åï¼å嫿¯ç®å½ï¼Mï¼ãèåï¼Cï¼ä»¥åæé®ï¼Fï¼ãè¿éæè¯´çç®å½ï¼ç¸å½äºæä»¬å¨ vhr ä¸æè¯´çä¸çº§èåï¼èåç¸å½äºæä»¬å¨ vhr ä¸æè¯´çäºçº§èåã
å½ç¨æ·ä»å端ç»å½æååï¼è¦å»å¨æå è½½çèåçæ¶åï¼å°±æ¥è¯¢ M å C ç±»åçæ°æ®å³å¯ï¼F ç±»åçæ°æ®ä¸æ¯èåé¡¹ï¼æ¥è¯¢çæ¶åç´æ¥è¿æ»¤æå³å¯ï¼éè¿
menu_type
è¿ä¸ªå段å¯ä»¥è½»æ¾çè¿æ»¤æ F ç±»åçæ°æ®ãå°ä¼ä¼´ä»¬æ³æ³ï¼F ç±»åçæ°æ®è¿æ»¤æä¹åï¼å©ä¸çæ°æ®ä¸å°±æ¯ä¸çº§èååäºçº§èåäºï¼é£ä¸å°±å vhr å䏿 ·äºä¹ï¼
æååæ¥è¯´è¯´ F ç±»åçï¼F ç±»åçå°±æ¯æé®çº§å«çæéäºï¼å端æ¯ä¸ä¸ªæé®çæ§è¡ï¼éè¦åªäºæéï¼ç°å¨å°±å¨è¿éå®ä¹å¥½ã
举ä¸ä¸ªç®åçä¾å大家æ¥çä¸ï¼
å½éè¦å±ç¤ºç¨æ·ç®¡çè¿ä¸ªèåçæ¶åï¼éè¦
system:user:list
è¿ä¸ªæéï¼å½éè¦ç¹å»ç¨æ·ä¿®æ¹è¿ä¸ªæé®çæ¶åï¼åéè¦
system:user:edit
è¿ä¸ªæéã
å ¶ä»ç¸å ³çè¡¨åºæ¬ä¸å vhr 齿¯ä¸æ ·çï¼ç¨æ·æç¨æ·è¡¨
sys_user
ï¼è§è²æè§è²è¡¨
sys_role
ï¼ç¨æ·åè§è²å ³èç表æ¯
sys_user_role
ï¼èµæºåè§è²å ³èç表æ¯
sys_role_menu
ã
å½ç¨æ·ç»å½æååï¼åç«¯ä¼æä¾ä¸ä¸ªæ¥å£ï¼å°å½åç¨æ·çè§è²åæéç»ç»è¿åç»å端ï¼
- æ¥è¯¢è§è²æè·¯ï¼æ ¹æ®ç¨æ· idï¼å
å»
è¡¨ä¸æ¥è¯¢å°è§è² idï¼åæ ¹æ®è§è² id å»sys_user_role
è¡¨ä¸æ¥è¯¢å°å¯¹åºçè§è²ï¼è¿éä¸ºäºæ¹ä¾¿å¤§å®¶çè§£è¿ä¹æè¿°ï¼å®é ä¸ä¸ä¸ªå¤è¡¨èåæ¥è¯¢å³å¯ï¼ãsys_role
- æ¥è¯¢æéæè·¯ï¼æ ¹æ®ç¨æ· idï¼å
å»
è¡¨ä¸æ¥è¯¢å°è§è² idï¼åæ ¹æ®è§è² id å»sys_user_role
è¡¨ä¸æ¥è¯¢å°å¯¹åºçè§è²ï¼åæ¿çè§è² id å»sys_role
è¡¨ä¸æ¥è¯¢å°å¯¹åºçsys_role_menu
ï¼åæ ¹æ®menu_id
å»menu_id
è¡¨ä¸æ¥è¯¢å°å¯¹åºç menu ä¸çæéï¼è¿éä¸ºäºæ¹ä¾¿å¤§å®¶çè§£è¿ä¹æè¿°ï¼å®é ä¸ä¸ä¸ªå¤è¡¨èåæ¥è¯¢å³å¯ï¼ãsys_menu
å端æäºç¨æ·çæé以åè§è²ä¹åï¼å°±å¯ä»¥èªè¡å³å®æ¯å¦æ¾ç¤ºæä¸ä¸ªèåæè æ¯å¦å±ç¤ºæä¸ä¸ªæé®äºã
3. å端æé夿
æå æ¥è¯´è¯´è¿å TienChin 项ç®ä¸æ¯æä¹åçï¼å³ RuoYi èææ¶çå®ç°æ¹æ¡ï¼ï¼åæ¥å vhr è¿è¡ä¸ä¸ªå¯¹æ¯ã
å¨ TienChin 项ç®ä¸æ¯éè¿æ³¨è§£æ¥æ§å¶æéçï¼æ¥å£çè®¿é®æé齿¯éè¿æ³¨è§£æ¥æ è®°çï¼ä¾å¦ä¸é¢è¿ç§ï¼
@PreAuthorize("@ss.hasPermi('system:menu:add')")
@PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu) {
//çç¥
}
/**
* ä¿®æ¹èå
*/
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysMenu menu) {
//çç¥
}
/**
* å é¤èå
*/
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
@DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Long menuId) {
//çç¥
}
å¤å¶
æ¯ä¸ä¸ªæ¥å£éè¦ä»ä¹æéï¼é½æ¯éè¿
@PreAuthorize
注解æ¥å®ç°çï¼å ³äºè¿ä¸ªæ³¨è§£ç使ç¨åçï¼æ¾å¥ä¹åä¹æä¸¤ç¯æç« ï¼
- æ³è¦æ§å¶å¥½æéï¼è¿å «ä¸ªæ³¨è§£ä½ å¿ é¡»ç¥éï¼
- Spring Security ä¸çæé注解å¾ç¥å¥åï¼
çæäºè¿ä¸¤ç¯æç« ï¼ä¸é¢è¿ä¸ªæ³¨è§£å°±æäºï¼æè¿éä¸èµè¿°ã
ä¸è¿ä¸é¢è¿ç§åæ³è¯´å°åºè¿æ¯æä¸ç¹â硬ç¼ç âï¼å 为访é®åªä¸ªæ¥å£éè¦åªäºæéï¼å¨ä»£ç ä¸åºå®äºï¼å¦ææ¥å£åæéç´æ¥çå ³ç³»è½å¤ä¿åå°æ°æ®åºä¸ï¼é£ä¹ç¨æ·å°±å¯ä»¥å¨èªå·±éè¦çæ¶åï¼éæ¶è¿è¡çµæ´»ä¿®æ¹ï¼å²ä¸ç¾åï¼
å¨ vhr 项ç®ä¸ï¼æ¾å¥å©ç¨ Spring Security ä¸èªå®ä¹ FilterInvocationSecurityMetadataSource å AccessDecisionManager å®ç°äºæå¡ç«¯å¨ææ§å¶æéãè¿ä¸ªå ·ä½çå®ç°æè·¯ä¹åçæç« ä¸ä¹å大家å享è¿äºï¼ä¼ éé¨ï¼Spring Security 卿æéå®ç°æ¹æ¡ï¼ï¼è¿éå°±ä¸èµè¿°äºã
ç¸å¯¹æ¥è¯´ï¼vhr ä¸çå®ç°æ¹æ¡æ´çµæ´»ä¸äºï¼å 为å¯ä»¥é ç½®æ¥å£åæéä¹é´çå ³ç³»ãä¸è¿æä¹è¯´å¢ï¼å ¶å®å RuoYi-Vue è¿æ ·ç¡¬ç¼ç å ¶å®ä¹ä¸æ¯ä¸å¯ä»¥ï¼æ¯ç«æ¥å£åæéä¹é´çæ å°å ³ç³»è¿æ¯ç¨æ¾âä¸ä¸âä¸äºï¼æ®éç¨æ·å¯è½å¹¶ä¸æè¯¥å¦ä½é ç½®ï¼è¿ä¸ªå å ¥è¯´ç³»ç»æä¾äºè¿ä¸ªåè½ï¼é£ä¹æ´å¤çè¿æ¯é¢åç¨åºåè¿ä¸ç±»ä¸ä¸äººåçï¼é£ä¹ç¨åºåå°åºæ¯å¦éè¦è¿ä¸ªåè½å¢ï¼æè§å¾è¿æ¯å¾å ·ä½æ åµå ·ä½åæã
æ»ä¹ï¼å°ä¼ä¼´ä»¬å¯ä»¥ç»åèªå·±é¡¹ç®çå®é æ åµï¼æ¥å³å®æ¥å£åæéä¹é´çæ å°å ³ç³»æ¯å¦éè¦å¨æç®¡çï¼å¦æéè¦å¨æç®¡çï¼é£ä¹å¯ä»¥æç § vhr ä¸çæ¹æ¡æ¥ï¼å¦æä¸éè¦å¨æç®¡çï¼é£ä¹å°±æç § RuoYi-Vue èææ¶ä¸çæ¹å¼æ¥å°±è¡äºã
好å¦ï¼è¿å°±æ¯ RuoYi-Vue è¿ä¸ªèææ¶ä¸å ³äºæéç设计ï¼ç°å¨æä¸ä¸ªæ°çé®é¢æå¨é¢åï¼å¦ä½ç»ç¨æ·è®¾ç½®æéçï¼ç°å¨æ´ä¸ªç³»ç»çæéæ¶æå¸å®æçææç½ç½çï¼é£ä¹ç¨æ·çæé忝ä»ä½èæ¥çå¢ï¼è¿ä¸ªæä»¬ä¸ç¯æç« ç»§ç»æè§£ã
æ¾å¥æè¿æ£å¨å½å¶ TienChin 项ç®è§é¢ï½éç¨ Spring Boot+Vue3 ææ¯æ ï¼éè¾¹ä¼æ¶åå°åç§å¥½ç©çææ¯ï¼å°ä¼ä¼´ä»¬æ¥åæ¾å¥ä¸èµ·åä¸ä¸ªå®æçè¶ 90% ç项ç®ï¼æ³æ³æ³è¿é-->TienChin 项ç®é å¥è§é¢æ¥å¦ã