权限管理系统概要设计

权限控制存在于大多数系统当中,因为大多数系统都需要:

  • 出于安全性考虑,防止系统受到恶意操作。比如,恶意绕过不完善的权限系统进入系统查询敏感数据
  • 设立用户可见范围,避免用户过度操作。比如,避免用户随意删除/修改不应当他处理的数据

一个公司一般来说开发、维护多个系统,而权限控制又常见于各系统中,为避免重复劳动,可以将权限控制提取出一个系统,再通过RPC方式供其他系统调用,如HTTP、Web Service。

一般来说,系统的权限校验点在于,并不限于:

  • 登陆。检查用户口令是否正确
  • 导航菜单。根据用户/角色的权限加载菜单项,只展现拥有的权限
  • 具体页面。只展现拥有的按钮
  • 进入具体业务前,检查权限,一般来说,可通过URL进行控制
    •   点击菜单项,进入具体功能(菜单级别的权限控制)
    •   点击具体功能内的操作按钮,比如【Add】(按钮级别的权限控制)

对于上述这些基础的功能,经典的权限5表就可实现:

MYSQL DDL :

drop table if exists T_FUNCTION;

drop table if exists T_ROLE;

drop table if exists T_ROLE_FUNCTION;

drop table if exists T_USER;

drop table if exists T_USER_ROLE;

/*==============================================================*/
/* Table: T_FUNCTION                                            */
/*==============================================================*/
create table T_FUNCTION
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名称‘,
   CODE                 varchar(128) comment ‘功能编码‘,
   URL                  varchar(256) comment ‘功能链接(请求地址)‘,
   TYPE                 char(1) comment ‘类型:菜单、按钮‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_ROLE                                                */
/*==============================================================*/
create table T_ROLE
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名称‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_ROLE_FUNCTION                                       */
/*==============================================================*/
create table T_ROLE_FUNCTION
(
   ID                   int(11) not null,
   ROLE_ID              int(11),
   FUNCTION_ID          int(11),
   primary key (ID)
);

/*==============================================================*/
/* Table: T_USER                                                */
/*==============================================================*/
create table T_USER
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名字‘,
   LOGIN_ID             varchar(128) comment ‘登录ID‘,
   PASSWORD             varchar(128) comment ‘密码‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_USER_ROLE                                           */
/*==============================================================*/
create table T_USER_ROLE
(
   ID                   int(11) not null,
   USER_ID              int(11),
   ROLE_ID              int(11),
   primary key (ID)
);

alter table T_ROLE_FUNCTION add constraint FK_Reference_3 foreign key (ROLE_ID)
      references T_ROLE (ID) on delete restrict on update restrict;

alter table T_ROLE_FUNCTION add constraint FK_Reference_4 foreign key (FUNCTION_ID)
      references T_FUNCTION (ID) on delete restrict on update restrict;

alter table T_USER_ROLE add constraint FK_Reference_1 foreign key (USER_ID)
      references T_USER (ID) on delete restrict on update restrict;

alter table T_USER_ROLE add constraint FK_Reference_2 foreign key (ROLE_ID)
      references T_ROLE (ID) on delete restrict on update restrict;

由于权限系统是多个系统共同使用的,所以需要加上所属系统的属性:

MYSQL DDL :

drop table if exists T_FUNCTION;

drop table if exists T_ROLE;

drop table if exists T_ROLE_FUNCTION;

drop table if exists T_SYSTEM;

drop table if exists T_USER;

drop table if exists T_USER_ROLE;

/*==============================================================*/
/* Table: T_FUNCTION                                            */
/*==============================================================*/
create table T_FUNCTION
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名称‘,
   CODE                 varchar(128) comment ‘功能编码‘,
   URL                  varchar(256) comment ‘功能链接(请求地址)‘,
   TYPE                 char(1) comment ‘类型:菜单、按钮‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   SYSTEM_ID            int(11) comment ‘系统编码‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_ROLE                                                */
/*==============================================================*/
create table T_ROLE
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名称‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   SYSTEM_ID            int(11) comment ‘系统编码‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_ROLE_FUNCTION                                       */
/*==============================================================*/
create table T_ROLE_FUNCTION
(
   ID                   int(11) not null,
   ROLE_ID              int(11),
   FUNCTION_ID          int(11),
   primary key (ID)
);

/*==============================================================*/
/* Table: T_SYSTEM                                              */
/*==============================================================*/
create table T_SYSTEM
(
   ID                   int(11) not null,
   NAME                 varchar(128),
   STATUS               char(1),
   primary key (ID)
);

/*==============================================================*/
/* Table: T_USER                                                */
/*==============================================================*/
create table T_USER
(
   ID                   int(11) not null,
   NAME                 varchar(128) comment ‘名字‘,
   LOGIN_ID             varchar(128) comment ‘登录ID‘,
   PASSWORD             varchar(128) comment ‘密码‘,
   STATUS               char(1) comment ‘状态:有效、无效‘,
   primary key (ID)
);

/*==============================================================*/
/* Table: T_USER_ROLE                                           */
/*==============================================================*/
create table T_USER_ROLE
(
   ID                   int(11) not null,
   USER_ID              int(11),
   ROLE_ID              int(11),
   primary key (ID)
);

alter table T_FUNCTION add constraint FK_Reference_6 foreign key (SYSTEM_ID)
      references T_SYSTEM (ID) on delete restrict on update restrict;

alter table T_ROLE add constraint FK_Reference_5 foreign key (SYSTEM_ID)
      references T_SYSTEM (ID) on delete restrict on update restrict;

alter table T_ROLE_FUNCTION add constraint FK_Reference_3 foreign key (ROLE_ID)
      references T_ROLE (ID) on delete restrict on update restrict;

alter table T_ROLE_FUNCTION add constraint FK_Reference_4 foreign key (FUNCTION_ID)
      references T_FUNCTION (ID) on delete restrict on update restrict;

alter table T_USER_ROLE add constraint FK_Reference_1 foreign key (USER_ID)
      references T_USER (ID) on delete restrict on update restrict;

alter table T_USER_ROLE add constraint FK_Reference_2 foreign key (ROLE_ID)
      references T_ROLE (ID) on delete restrict on update restrict;

具备角色继承的设计,待续。。。

时间: 2024-10-25 20:15:10

权限管理系统概要设计的相关文章

Asp.Net Core 项目实战之权限管理系统(7) 组织机构、角色、用户权限

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

Asp.Net Core 项目实战之权限管理系统(6) 功能管理

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

权限管理系统 Spring-authority

是由 spring+springmvc+hibernate+spring-security +easyui +boostrap 写的一个框架集合,目前实现了一个基础的权限管理系统,权限是基于细粒度的过滤,对于初学权限设计的人来说也算是个最简洁的权限实现,基于它来做项目,它只是做了一些绝大部分项目都应该做的一些基础功能. 1参考资料 http://blog.csdn.net/k10509806/article/details/6369131 http://www.cnblogs.com/wenxi

Angularjs,WebAPI 搭建一个简易权限管理系统

Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一) 1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 WebAPI项目主体结构 Angularjs前端主体结构 2. 前言 Angularjs开发CRUD类型的Web系统生产力惊人,与jQuery,YUI,kissy,Extjs等前端框架区别非常大,初学者在学习的过程中容易以自己以往的经验来学习Angularjs 往往走入误区,最典型的特征是在的开发过程中,使用

通用权限管理系统学习心得

一直相信阅读优秀的代码,是学习编程的最好方式,经过一段时间对吉日嘎拉通用权限管理系统的学习和使用,我从中受益良多,其中不乏一些优秀的设计思想,其中给我印象比较深刻的有几点,我将按照我个人的理解写下学习笔记,希望能给自己这段时间的学习留下点什么,同时也希望能别人能够通过阅读我的文章来获得一些帮助. 这篇文章我也来探讨一下数据网格设置功能的实现 每个网格的设置对应保存在本地启动目录下UserParameter的文件下的一个XML文件,其中XML文件的命名规则:窗体名称_网格名称.xml (如窗体名称

Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实

Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端

参考页面: http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-design-pattern.html http://www.yuanjiaocheng.net/ASPNET-CORE/mvc-routing.html http://www.yuanjiaocheng.net/ASPNET-CORE/attribute-route.html http://www.yuanjiaocheng.net/ASPNET-CORE/core-actionresults

jfinal3.0+easyui1.4.4后台权限管理系统 [2017.2.11 更新]

本程序是基于最新的jfinal3.0+easyui1.4.4搭建的后台权限管理系统MYSQL版,包括选项数据字典.层级数据字典.部门管理.菜单管理.角色管理.用户管理.日志管理,既适合新手学习,也适合在此基础上开始您的应用程序开发旅程. 本程序是店家一直在更新完善并在生产环境中使用的版本,赢利不是我的目的,您的购买是我继续坚持改善和完善后台权限管理系统的动力.你可以关注作者的博客:http://lionkas.blog.51cto.com/ 获取到最新版本的更新信息. https://lionk

Asp.Net Core 项目实战之权限管理系统(4) 依赖注入、仓储、服务的多项目分层实现

0 Asp.Net Core 项目实战之权限管理系统(0) 无中生有 1 Asp.Net Core 项目实战之权限管理系统(1) 使用AdminLTE搭建前端 2 Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计 3 Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL 4 Asp.Net Core 项目实战之权限管理系统(4) 依赖注入.仓储.服务的多项目分层实现 5 Asp.Net Core 项目实