几乎接触到每个后台项目,都有权限系统,具有广泛的适应性,早就想整理一下这个权限系统的相关细节,奈何一直忙于公司移动端项目开发,由于最近接到客户一个新的需求,需要增加一个新的大模块,需要增加新的角色,新的权限,新的用户,正好新需求做完,正在等客户反馈修改意见,在此抽空写一下相关的整理总结,附上相关的数据库表脚本。
当然限于不同的后台项目,有不同权限需求,这里暂不考虑数据权限,岗位,角色组,数据标签等,这里仅仅是最基础最广泛的权限系统,水平有限之处,请多多谅解。
1. 账号的定义
每个员工想要进入系统肯定都会有一个账号,而这个账号就是一把钥匙。
CREATE TABLE [dbo].[Tb_Common_User](
[UserID] [int] IDENTITY(1,1) NOT NULL,
[RoleID] [int] NULL,
[UserName] [nvarchar](200) NULL,
[RealName] [nvarchar](200) NULL,
[Sex] [nvarchar](2) NULL,
[Telphone] [nvarchar](20) NULL,
[Email] [nvarchar](50) NULL,
[ReputationScore] [int] NULL,
[Password] [nvarchar](40) NULL,
[RegionID] [nvarchar](6) NULL,
[CreateTime] [datetime] NULL,
[UseTime] [datetime] NULL,
[LastIP] [nvarchar](17) NULL,
[LastTime] [datetime] NULL,
[State] [tinyint] NULL,
[AreaID] [int] NULL,
CONSTRAINT [PK_Tb_Common_User] PRIMARY KEY CLUSTERED
(
[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
2. 角色的定义
角色管理是确定角色具备哪些权限的一个过程,他是一个集合的概念,是众多最小权限颗粒的组成。
我们通过把权限给这个角色,再把角色给账号,从而实现账号的权限,因此它承担了一个桥梁的作用。
引入角色这个概念,可以帮助我们灵活的扩展,使一个账号可以具备多种角色。
CREATE TABLE [dbo].[Tb_Common_Role](
[RoleID] [int] IDENTITY(1,1) NOT NULL,
[RoleName] [nvarchar](20) NULL,
[RoleMemo] [nvarchar](20) NULL,
[State] [nvarchar](20) NULL,
[CreateTime] [datetime] NULL,
CONSTRAINT [PK_Tb_Common_Role] PRIMARY KEY CLUSTERED
(
[RoleID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
备注:State是该角色,十分禁用,一般不会删除,因为存在用户角色表,角色权限表,
3. 角色的定义
权限可以分为三种:页面权限,操作权限,数据权限。
页面权限
控制你可以看到哪个页面,看不到哪个页面。
很多系统都只做到了控制页面这一层级,它实现起来比较简单,一些系统会这样设计,但是比较古板,控制的权限不精细,难以在页面上对权限进行更下一层级的划分。
操作权限
则控制你可以在页面上操作哪些按妞。
延伸:当我们进入一个页面,我们的目的无非是在这个页面上进行增删改查,那在页面上对应的操作可能是:查询,删除,编辑,新增四个按钮。
可能你在某个页面上,只能查询数据,而不能修改数据。
数据权限
数据权限则是控制你可以看到哪些数据,比如市场A部的人只能看到或者修改A部创建的数据,他看不到或者不能修改B部的数据。
延伸:数据的控制我们一般通过部门去实现,每条记录都有一个创建人,而每一个创建人都属于某个部门,因此部门分的越细,数据的控制层级也就越精细,这里是否有其他好的方式除了部门这个维度还有其他什么方式可以控制数据权限,大家可以提出来探讨一下。
哪个页面要放置哪些权限,完全根据业务需要配置,你只需要把控制权限的地方列出来交给开发就好。
CREATE TABLE [dbo].[Tb_Common_Authority](
[AuthorityID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NULL,
[OrderID] [int] NULL,
[AuthorityName] [nvarchar](20) NULL,
[Memo] [nvarchar](20) NULL,
[State] [nvarchar](20) NULL,
[CreateTime] [datetime] NULL,
CONSTRAINT [PK_Tb_Common_Authority] PRIMARY KEY CLUSTERED
(
[AuthorityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
4. 角色权限关系表
CREATE TABLE [dbo].[Tb_Common_RoleAuthority](
[RoleAuthorityID] [int] IDENTITY(1,1) NOT NULL,
[RoleID] [int] NULL,
[AuthorityID] [int] NULL,
CONSTRAINT [PK_Tb_Common_RoleAuthority] PRIMARY KEY CLUSTERED
(
[RoleAuthorityID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
5. 模块的定义
模块管理(菜单、动作、数据)是整个平台中框架功能体现的核心。整个平台内的各个功能模块都是在此进行配置的。
CREATE TABLE [dbo].[Tb_Sys_Modules](
[ModuleID] [int] IDENTITY(1,1) NOT NULL,
[ParentID] [int] NOT NULL,
[OrderID] [int] NOT NULL,
[ModuleName] [nvarchar](50) NULL,
[className] [varchar](50) NULL,
[Description] [text] NULL,
[Content] [text] NULL,
[Url] [varchar](500) NULL,
[Code] [varchar](50) NULL,
[qiantaiurl] [nvarchar](50) NULL,
[MessageID] [int] NULL,
[PhotoID] [int] NULL,
[Pic] [text] NULL,
[Intro] [text] NULL,
[ArticleNums] [int] NULL,
[RoadLink] [nvarchar](200) NULL,
[AuthorityID] [int] NULL,
[IsNews] [char](1) NULL,
CONSTRAINT [PK_Tb_Sys_Modules] PRIMARY KEY CLUSTERED
(
[ModuleID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
备注:
第一:每一个模块功能,是带有url字段的,这是模块表的核心字段,某个页面便是具体的模块功能的表现
第二:拥有权限ID,某一个模块功能,是属于某个角色权限的
以上就是关于数据库表字段设计的全部内容,关于页面的设计部分,将在下一章希望本文的内容对大家的学习或者工作能带来一定的帮助~如果有疑问大家可以留言交流,喜欢可以关注哦,谢谢大家对我的支持!
文章参考博主:https://blog.csdn.net/k7Jz78GeJJ/article/details/78489155