现在的位置: 首页 > 综合 > 正文

通用权限管理的表结构(一)

2014年02月07日 ⁄ 综合 ⁄ 共 3706字 ⁄ 字号 评论关闭

先把图传上来,具体思路下班回家再写呢。

    先大概解释一下,有user表、role表、group表、action表、menu表和menuType表,关系表有user_role,user_group,role_action,group_action四张表,均为多对多关系。
    user表就是用户表,role是角色表,group是分组表,action是权限表,menu是菜单或者资源表,menutype用来定义menu的。
    我的理解是这样的,user自身是没有权限的,user的权限是通过他所具有的角色和所处在组织赋予的。所以在表结构中,user表与action表没有直接关联,而是通过group和role关联action表的。
    举个例子:假设存在一个公司,公司有各层组织和员工。公司员工和非公司员工都是user,非公司员工不具备公司内的角色,也不处于公司的某个组织中,所以就没有相应的权限。而公司内部员工,比如经理就有经理的权限,人事就有人事的权限,这些权限是由员工具有的角色赋予的。同时,员工还隶属于公司的某个组织,比如某个员工属于后勤部的,那他就应该有某些操作后勤物资的权限,而这种权限的由于他所在的组赋予的。所以,角色有权限,组有权限,而用户没有权限,表现在表结构上就是user与action表并没有直接关联,而是通过role和group表进行关联的。

DROP TABLE IF EXISTS _user;
CREATE TABLE _user(
ID INT(9)PRIMARY KEY,/*用户id*/
UserName
VARCHAR(128) NOT NULL,/*用户名*/
Pword VARCHAR(128)NOT NULL,/*密码*/
Email VARCHAR(100)UNIQUE,/*登录名,用户Email*/
Question
VARCHAR(100) ,/*重置密码的问题*/
Answer
VARCHAR(100) ,/*重置密码的答案*/
UserGroup
INT(9) NOT NULL,/*用户组*/
CreatedTime
DATETIME NOT NULL,/*帐户创建时间*/
LastLoginTime
DATETIME ,
/*上一次登录的时间*/
UserStatus
INT(1) NOT NULL,/*用户状态*/
IsOnline
BIT NOT NULL,
/*是否在线*/
IsLimit
BIT NOT NULL
/*是否受权限限制,0为受限制*/
);

DROP TABLE IF EXISTS _role;
CREATE TABLE _role(
ID INT(9)PRIMARY KEY,/*角色ID*/
RoleName
VARCHAR(30) NOT NULL,/*角色名称*/
RoleDesc
VARCHAR(50) ,
/*说明*/
RoleOrder
INT NOT NULL
/*排序*/
);

DROP TABLE IF EXISTS _action;
CREATE TABLE _action(
ID INT(9)PRIMARY KEY,/*权限ID*/
ActionName
VARCHAR(30) NOT NULL,/*权限名称*/
ActionTag
VARCHAR(50) NOT NULL,/*权限标识*/
ActionDesc
VARCHAR(50) ,
/*说明*/
ActionOrder
INT NOT NULL
/*排序*/
);

DROP TABLE IF EXISTS _group;
CREATE TABLE _group(
ID INT(9)PRIMARY KEY,/*分组ID*/
GroupName
VARCHAR(30) NOT NULL,/*组名称*/
GroupOrder
INT NOT NULL,
/*排序*/
GroupDesc
VARCHAR(50) ,
/*说明*/
GroupType
INT(1) NOT NULL/*分组类型 用户组0,角色组1*/
);

DROP TABLE IF EXISTS _menutype;
CREATE TABLE _menutype(
ID INT(9)PRIMARY KEY,/*菜单分类ID*/
MenuTypeName
VARCHAR(30) NOT NULL,/*菜单类型名称*/
MenuTypeDesc
VARCHAR(50) ,
/*说明*/
MenuTypeDepth
INT(1) NOT NULL,/*深度*/
MenuTypeSuperIDINT(9)NOT NULL,/*上级ID*/
MenuTypeNum
INT(1) NOT NULL/*下阶个数*/
);

DROP TABLE IF EXISTS _menu;
CREATE TABLE _menu(
ID INT(9)PRIMARY KEY,/*菜单ID*/
MenuTypeID
INT(9) NOT NULL,/*菜单类型*/
MenuName
VARCHAR(30) NOT NULL,/*菜单名称*/
MenuTag
VARCHAR(50) NOT NULL,/*菜单标识*/
MenuURL
VARCHAR(500) NOT NULL,/*菜单地址*/
MenuDisabled
BIT NOT NULL,
/*是否禁用*/
MenuDesc
VARCHAR(50) ,
/*说明*/
IsNav BITNOT NULL/*是否显示在导航菜单中*/
);
ALTER TABLE _menu ADD FOREIGN KEY(MenuTypeID) REFERENCES _menutype(ID);

DROP TABLE IF EXISTS user_role;
CREATE TABLE user_role(
ID INT(9)PRIMARY KEY,/*用户角色ID*/
UserID
INT(9) NOT NULL,/*用户ID*/
RoleID
INT(9) NOT NULL/*角色ID*/
);

ALTER TABLE user_role ADD FOREIGN KEY(UserID) REFERENCES _user(ID);
ALTER TABLE user_role ADD FOREIGN KEY(RoleID) REFERENCES _role(ID);

DROP TABLE IF EXISTS user_group;
CREATE TABLE user_group(
ID INT(9)PRIMARY KEY,/*用户组ID*/
UserID
INT(9) NOT NULL,/*用户ID*/
GroupID
INT(9) NOT NULL,/*组ID*/
UGName
VARCHAR(30) NOT NULL,/*用户分组名称*/
UGDesc
VARCHAR(50) NOT NULL,/*用户分组描述*/
Depth INT(1)NOT NULL,/*用户分组深度*/
SuperID
INT(9) NOT NULL,/*用户分组上级*/
UGNum INT(1)NOT NULL/*用户分组下级数*/
);
ALTER TABLE user_group ADD FOREIGN KEY(UserID) REFERENCES _user(ID);
ALTER TABLE user_group ADD FOREIGN KEY(GroupID) REFERENCES _group(ID);

DROP TABLE IF EXISTS role_action;
CREATE TABLE role_action(
ID INT(9)PRIMARY KEY,/*编号*/
RoleID
INT(9) NOT NULL,/*角色ID*/
ActionID
INT(9) NOT NULL,/*权限标识*/
Flag BITNOT NULL/*1为允许,0为不禁止*/
);
ALTER TABLE role_action ADD FOREIGN KEY(RoleID) REFERENCES _role(ID);
ALTER TABLE role_action ADD FOREIGN KEY(ActionID) REFERENCES _action(ID);

DROP TABLE IF EXISTS group_action;
CREATE TABLE group_action(
ID INT(9)PRIMARY KEY,/*编号*/
GroupID
INT(9) NOT NULL,/*角色ID*/
ActionID
INT(9) NOT NULL,/*权限标识*/
Flag BITNOT NULL/*1为允许,0为不禁止*/
);
ALTER TABLE group_action ADD FOREIGN KEY(GroupID) REFERENCES _group(ID);
ALTER TABLE group_action ADD FOREIGN KEY(ActionID) REFERENCES _action(ID);

DROP TABLE IF EXISTS menu_action;
CREATE TABLE menu_action(
ID INT(9)PRIMARY KEY,/*菜单权限ID*/
MenuID
INT(9) NOT NULL,/*菜单ID*/
ActionID
INT(9) NOT NULL,/*权限标识*/
);
ALTER TABLE menu_action ADD FOREIGN KEY(MenuID) REFERENCES _menu(ID);
ALTER TABLE menu_action ADD FOREIGN KEY(ActionID) REFERENCES _action(ID);

抱歉!评论已关闭.