如何設計乙個基於角色的使用者許可權系統?

2021-08-07 10:17:49 字數 3861 閱讀 4145

安聚尼股份****

2017-08-25 09:55

基於角色的使用者許可權管理一般在任何專案中都是乙個必不可少的功能。在此設計裡,主要有使用者、角色兩個方面,角色需要有動態,使用者的角色分配,使用者與角色之間是多對多或一對多的關係,資料庫表設計如下:

一、資料庫表設計

1、user(使用者表):

記錄使用者的基本資訊

-- table "user" ddl

create table `user` (

`userid` int(11) not null auto_increment,

`username` varchar(50) not null default '',

`password` varchar(50) not null default '',

`email` varchar(255) not null default '',

`***` char(1) not null default '',

`createdate` varchar(50) not null default '',

`lastlogindate` varchar(50) default '無',

`photo` varchar(255) default null,

`telephone` varchar(50) default '無',

`birthdate` varchar(50) default '無',

`address` varchar(255) default '無',

`post` varchar(10) default '無',

`status` char(10) not null default '',

primary key (`userid`)

) engine=innodb auto_increment=10 default charset=gbk;

2、role(角色表):

-- table "role" ddl

create table `role` (

`roleid` int(11) not null auto_increment,

`rolename` varchar(50) not null,

`description` varchar(255) default null,

primary key (`roleid`)

) engine=innodb auto_increment=5 default charset=gbk;

3、userfunction(使用者功能表):

記錄系統中所有的功能標識,此表的資料相對不變化小

-- table "userfunction" ddl

create table `userfunction` (

`functionid` int(11) not null auto_increment,

`functioncode` varchar(255) not null,

`functionname` varchar(255) not null,

primary key (`functionid`)

) engine=innodb auto_increment=18 default charset=gbk;

4、userandrole(使用者與角色關聯表):

用於記錄使用者與角色的關聯關係,此表的設計通常為多對多關係的中間表,分別記錄著使用者 id和角色 id。

-- table "userandrole" ddl

create table `userandrole` (

`id` int(11) not null auto_increment,

`userid` int(11) default null,

`roleid` int(11) default null,

primary key (`id`),

key `fk_reference_1` (`userid`),

key `fk_reference_2` (`roleid`),

constraint `fk_reference_1` foreign key (`userid`) references `user` (`userid`),

constraint `fk_reference_2` foreign key (`roleid`) references `role` (`roleid`)

) engine=innodb auto_increment=11 default charset=gbk;

5、roleandfunction(角色與功能表):

記錄著乙個角色對應的功能 id

-- table "roleandfunction" ddl

create table `roleandfunction` (

`id` int(11) not null auto_increment,

`roleid` int(11) default null,

`functionid` int(11) default null,

primary key (`id`),

key `fk_reference_3` (`roleid`),

key `fk_reference_4` (`functionid`),

constraint `fk_reference_3` foreign key (`roleid`) references `role` (`roleid`),

constraint `fk_reference_4` foreign key (`functionid`) references `userfunction` (`functionid`)

) engine=innodb auto_increment=56 default charset=gbk;

二、工程目錄結構下:

主要涉及的類包,action、service、dao、框架基礎類、工具類、實體類等

三、以登入功能為例的實現

使用者在頁面輸入使用者名稱與密碼和驗證碼,開始登入,然後利用struts2的可配置驗證框架來檢查使用者輸入的合法性,比如必填驗證,當驗證失敗後,反回登入頁面並提示錯誤資訊,驗證成功後,進入action驗證驗證碼的合法性,通過後就可以執行登入業務邏輯了,查詢使用者是否存在,以及查詢使用者當前狀態是禁用還是啟用,都通過後,查詢使用者對應的許可權列表,並同使用者資訊一起儲存在使用者登入的環境物件中(baseusercontext),具體的**實現ru。

dao 的實現(使用 jdbc )

public inte***ce iuserinfodao , username, password);

} catch (sqlexception e) , userid);

} catch (sqlexception e) catch (exception e) {

e.printstacktrace();

addactionerror(e.tostring());

return input;

private mapsessionmap;

@override

public void setsession(maparg0) {

sessionmap = arg0;

基於使用者角色的許可權設計

整個例子隨便試驗下。使用者與角色是多對多 角色與許可權是多對多 aps user 使用者表 aps role 角色表 aps user group 使用者角色表 aps module 模組表 或成選單表 aps power 許可權表 1 先建立錶用以下指令碼 if exists select fro...

基於角色的許可權設計(一)

基於角色的許可權設計 一 在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。在許可權系統中,功能 許可權 是最小的單位,比如起草新聞 編輯新聞 審核新聞 刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞 編輯新聞等功能集合,而責任...

基於角色的許可權設計(一)

在任何系統中,許可權設計是最基礎的東西,本文給出乙個基於角色的許可權設計的循序漸進的設計方案。在許可權系統中,功能 許可權 是最小的單位,比如起草新聞 編輯新聞 審核新聞 刪除新聞等,而角色是一類功能的集合,比如新聞編輯這個角色,他可能有起草新聞 編輯新聞等功能集合,而責任編輯他可能就有更多的許可權...