2022-08-06 java系統(tǒng)權限設計

權限其實也就是登錄的用戶擁有的數(shù)據(jù)權限和操作權限(菜單權限),一般主要就是這兩種;
數(shù)據(jù)權限就是指你能看到什么數(shù)據(jù),簡單的舉個例子,你登錄12306 只能看到自己的購買的車票,但是看不到其他人購買的車票,這就是數(shù)據(jù)權限,數(shù)據(jù)隔離;
操作權限就是有些系統(tǒng)中的東西你能看到,但是不能操作,舉個例子,淘寶中你申請退款,必須等商家確認,而你既看不到商家的確認按鈕,也不能操作確認退款這個操作,這就是操作權限,也可以叫做菜單權限;

那么系統(tǒng)的用戶的權限一般是如何設計的呢?
一般用的操作權限都是通過角色來控制的,每個用戶都有一個或者多個角色,每個角色都有相應的操作菜單權限,這樣就相當于每個人有了這些操作權限;
而數(shù)據(jù)權限也可以通過角色綁定上,這樣也就是通過角色來控制兩種權限;
經(jīng)過實踐,上述這種方案會有弊端,就是當我想給其中一個人多分配一些數(shù)據(jù)權限的時候,當我更改這個人的角色的數(shù)據(jù)權限,會導致所有擁有這個角色的人的數(shù)據(jù)權限都進行了更改,這不是我想要的,那么解決辦法就是創(chuàng)建一個這個人獨有的角色,然后重新配置,其實這樣是不合理的,會創(chuàng)建很多角色的數(shù)據(jù),而操作權限則不會,因為我一般新增了一個菜單,當然是想給用戶用的,那么通過角色綁定的操作權限可以很方便的分配給相應的人;

這里推薦另一種;
就是操作權限是不變的,仍然放到角色上綁定,而數(shù)據(jù)權限則綁定到人的身上,也就是每個人的數(shù)據(jù)權限都可以是不一樣的,這樣設計會很靈活,數(shù)據(jù)權限的設置不會出現(xiàn)上述情況中的問題,但是會存在,一個人的系統(tǒng)界面是這樣的,你有這些數(shù)據(jù)能看到而不能操作,其實這也是正常現(xiàn)象,因為類似淘寶就是這樣的,讓你看,但是不會讓你操作; 還有就是你有這個菜單的操作權限,但是由于沒有分配數(shù)據(jù),導致你看不到這個菜單或者按鈕,導致也是無法操作,這都屬于正?,F(xiàn)象;

那么附上一般的表設計;

CREATE TABLE `auth_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一標識',
  `username` varchar(255) DEFAULT NULL COMMENT '用戶名',
  `password` varchar(255) DEFAULT NULL COMMENT '密碼',
  `email` varchar(255) DEFAULT NULL COMMENT '郵箱',
  `role_id` int(11) DEFAULT NULL COMMENT '角色id',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  PRIMARY KEY (`id`),
  UNIQUE KEY `name_unique` (`username`) COMMENT '名稱唯一'
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='用戶信息'

CREATE TABLE `auth_role` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '角色id',
  `name` varchar(55) DEFAULT NULL COMMENT '角色名稱',
  `type` varchar(55) DEFAULT 'USER' COMMENT '角色類型 字典項',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  `remark` varchar(55) DEFAULT NULL COMMENT '角色備注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8 COMMENT='用戶信息'

CREATE TABLE `auth_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '菜單id',
  `menu_name` varchar(55) DEFAULT NULL COMMENT '菜單名稱',
  `menu_code` varchar(55) DEFAULT NULL COMMENT '菜單編碼',
  `menu_level` int(2) DEFAULT '1' COMMENT '菜單級別',
  `menu_icon` varchar(55) DEFAULT NULL COMMENT '菜單圖標',
  `menu_url` varchar(255) DEFAULT NULL COMMENT '菜單地址',
  `menu_pid` int(11) DEFAULT '0' COMMENT '菜單父id',
  `menu_type` int(2) DEFAULT '1' COMMENT '菜單類型 1菜單 2按鈕',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時間',
  `remark` varchar(55) DEFAULT NULL COMMENT '備注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COMMENT='用戶信息'


CREATE TABLE `auth_role_menu` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `menu_id` int(11) DEFAULT NULL COMMENT '菜單id',
  `role_id` int(11) DEFAULT NULL COMMENT '角色id',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=101 DEFAULT CHARSET=utf8 COMMENT='用戶信息'

這里展示的主要是用戶的操作權限的設計

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容