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 项目实战之权限管理系统(5) 用户登录

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

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

8 Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载

github源码地址

0 功能设计

实现一个最简单最基本的权限管理系统,主要包括组织机构管理、角色管理、用户管理、功能管理、角色授权。

1 功能管理包括功能菜单、功能页面按钮两个层次。

2 功能授权针对角色进行。

3 每个用户可以拥有多个角色,用户的实际权限根据多角色求取并集得到。

0.0  组织机构管理

实现组织机构(或者叫部门)的相关管理操作,组织机构主要包括部门名称、部门编码、部门负责人、联系电话、备注、上级部门、创建人、创建电话等属性。

组织机构管理包括新增顶级、新增(新增当前选中部门的下级)、编辑、删除等功能。

考虑到组织机构、用户等权限管理相关的基本实体经常会在业务数据中使用,比如要记录业务数据的部门、创建人等信息(以外键形式记录DepartmentId、UserId等),为避免组织机构、用户等信息删除后,业务数据出现找不到相关联的对应实体,即为了保证数据的完整性,对权限管理设计到的实体统一做软删除(采用一个删除标记的逻辑删除,非物理删除)处理。

0.1 功能管理

系统功能的统一维护,这里进行深一级的控制,管理到各个功能界面业务逻辑操作按钮的级别,以树形格式展示,其中以一个标记属性标识该实体是一个导航菜单,还是菜单下包含的一个操作按钮。以上述组织机构管理为例,功能管理中存在一个名称为组织机构管理的项,其下包括新增组织机构、新增顶级组织机构、编辑组织机构、删除组织机构等子级。

功能管理实体主要包含父级、序号、名称、编码、地址、类型(导航菜单、功能按钮)、图标、备注等属性。

功能管理主要包括,新增顶级、新增、编辑、删除等功能。

0.2 角色管理

角色是一组具有相同功能用户的一个抽象,权限管理系统将具体功能的授权赋予角色,实现针对角色的权限管理。

角色实体主要包括角色编码、角色名称、创建人、创建时间、备注等属性。

角色管理主要包括新增角色、编辑角色、删除角色、角色授权等功能。

角色授权是为当前选中的角色授予功能导航菜单及功能页面按钮的相关权限的操作。用户登录后,会根据当前用户获取所属角色,然后取该用户所有角色的功能并集,确定功能菜单及相关功能界面按钮的是否可用状态。

0.3 用户管理

用户实体主要包括用户名、密码、用户姓名、邮箱、手机、备注、创建人、创建时间、上次登录时间、登录次数、所属部门等属性。

用户管理主要包括新增用户、编辑用户、删除用户、重置密码等功能。

新增及编辑用户时,需要首先选择用户所属部门,同时必须为当前用户分配对应的角色。

1 实体设计

根据上述功能设计,对实体类进行如下设计。对所有实体建立一个泛型基类Entity<TPrimaryKey>,默认的主键类型为Guid的实体基类Entity,权限管理系统的所有实体都从Entity基类继承,如果想要实现其他类型主键,新建的实体从Entity<TPrimaryKey>泛型基类继承即可。

/// <summary>
/// 泛型实体基类
/// </summary>
/// <typeparam name="TPrimaryKey">主键类型</typeparam>
public abstract class Entity<TPrimaryKey>
{
/// <summary>
/// 主键
/// </summary>
public virtual TPrimaryKey Id { get; set; }
} /// <summary>
/// 定义默认主键类型为Guid的实体基类
/// </summary>
public abstract class Entity : Entity<Guid>
{ }

1.0 组织机构实体

 /// <summary>
/// 部门实体
/// </summary>
public class Department : Entity
{
/// <summary>
/// 部门名称
/// </summary>
public string Name { get; set; } /// <summary>
/// 部门编号
/// </summary>
public string Code { get; set; } /// <summary>
/// 部门负责人
/// </summary>
public string Manager { get; set; } /// <summary>
/// 联系电话
/// </summary>
public string ContactNumber { get; set; } /// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; } /// <summary>
/// 父级部门ID
/// </summary>
public Guid ParentId { get; set; } /// <summary>
/// 创建人
/// </summary>
public Guid CreateUserId { get; set; } /// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; } /// <summary>
/// 是否已删除
/// </summary>
public int IsDeleted { get; set; } /// <summary>
/// 包含用户
/// </summary>
public virtual ICollection<User> Users { get; set; } /// <summary>
/// 创建人信息
/// </summary>
public virtual User CreateUser { get; set; }
}

1.1 功能实体

 /// <summary>
/// 功能菜单实体
/// </summary>
public class Menu : Entity
{
/// <summary>
/// 父级ID
/// </summary>
public Guid ParentId { get; set; } /// <summary>
/// 序号
/// </summary>
public int SerialNumber { get; set; } /// <summary>
/// 菜单名称
/// </summary>
public string Name { get; set; } /// <summary>
/// 菜单编码
/// </summary>
public string Code { get; set; } /// <summary>
/// 菜单地址
/// </summary>
public string Url { get; set; } /// <summary>
/// 类型:0导航菜单;1操作按钮。
/// </summary>
public int Type { get; set; } /// <summary>
/// 菜单图标
/// </summary>
public string Icon { get; set; } /// <summary>
/// 菜单备注
/// </summary>
public string Remarks { get; set; }
}

1.2 角色实体

public class Role : Entity
{
public string Code { get; set; } public string Name { get; set; } public Guid CreateUserId { get; set; } public DateTime? CreateTime { get; set; } public string Remarks { get; set; } public virtual User CreateUser { get; set; } public virtual ICollection<User> Users { get; set; } public virtual ICollection<Menu> Menus { get; set; }
}

1.3 用户实体

public class User : Entity
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; } /// <summary>
/// 密码
/// </summary>
public string Password { get; set; } /// <summary>
/// 用户姓名
/// </summary>
public string Name { get; set; } /// <summary>
/// 邮箱地址
/// </summary>
public string EMail { get; set; } /// <summary>
/// 手机号
/// </summary>
public string MobileNumber { get; set; } /// <summary>
/// 备注
/// </summary>
public string Remarks { get; set; } /// <summary>
/// 创建人
/// </summary>
public Guid CreateUserId { get; set; } /// <summary>
/// 创建时间
/// </summary>
public DateTime? CreateTime { get; set; } /// <summary>
/// 上次登录时间
/// </summary>
public DateTime LastLoginTime { get; set; } /// <summary>
/// 登录次数
/// </summary>
public int LoginTimes { get; set; } /// <summary>
/// 部门ID
/// </summary>
public Guid DeptmentId { get; set; } /// <summary>
/// 是否已删除
/// </summary>
public int IsDeleted { get; set; } /// <summary>
/// 所属部门实体
/// </summary>
public virtual Department Department { get; set; } /// <summary>
/// 创建人实体
/// </summary> public virtual User CreateUser { get; set; } /// <summary>
/// 角色集合
/// </summary> public virtual ICollection<Role> Roles { get; set; }
}

2 总结

本次主要针对一个最简单的权限管理系统进行了功能及实体的设计,项目中新增了相关实体类文件,目前解决方案结构如下下所示:

接下来会介绍如何在Asp.Net Core中通过EntityFramework Core使用PostgreSQL数据库。

Asp.Net Core 项目实战之权限管理系统(2) 功能及实体设计的更多相关文章

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

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

  2. Asp.Net Core 项目实战之权限管理系统(0) 无中生有

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

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

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

  4. Asp.Net Core 项目实战之权限管理系统(3) 通过EntityFramework Core使用PostgreSQL

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

  5. Asp.Net Core 项目实战之权限管理系统(5) 用户登录

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

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

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

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

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

  8. Asp.Net Core 项目实战之权限管理系统(8) 功能菜单的动态加载

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

  9. Net Core 项目实战之权限管理系统(0)

    0 前言 Net Core 项目实战之权限管理系统(0) 无中生有   0 http://www.cnblogs.com/fonour/p/5848933.html 学习的最好方法就是动手去做,这里以 ...

随机推荐

  1. 为.NET Core项目定义Item Template

    作为这个星球上最强大的IDE,Visual Studio不仅仅提供了很多原生的特性,更重要的是它是一个可定制的IDE,比如自定义Project Template和Item Template就是一个非常 ...

  2. Hive安装配置指北(含Hive Metastore详解)

    个人主页: http://www.linbingdong.com 本文介绍Hive安装配置的整个过程,包括MySQL.Hive及Metastore的安装配置,并分析了Metastore三种配置方式的区 ...

  3. 在centos7中添加一个新用户,并授权

    前言 笔记本装了一个centos,想要让别人也可以登录访问,用自己的账号确实不太好,于是准备新建一个用户给他. 创建新用户 创建一个用户名为:zhangbiao [root@localhost ~]# ...

  4. springmvc 多数据源 SSM java redis shiro ehcache 头像裁剪

    获取下载地址   QQ 313596790  A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:31359679 ...

  5. 页面布局class常见命名规范

    头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left rig ...

  6. Android AndroidRuntime类

     AndroidRuntime类是安卓底层很重要的一个类,它负责启动虚拟机以及Java线程,AndroidRuntime类在一个进程中只有一个实例对象保存在全局变量,gCurRuntime中. 

  7. 一步步搭建自己的博客 .NET版(2、评论功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  8. 腾讯云下安装 nodejs + 实现 Nginx 反向代理

    本文将介绍如何给腾讯云上的 Ubuntu Server 12.04 LTS 64位主机安装 node 及 nginx,并简单配置反向代理. 笔者在整个安装过程中遇到不少麻烦(不赘述),如果你希望少踩坑 ...

  9. Running Dubbo On Spring Boot

    Dubbo(http://dubbo.io/) 是阿里的开源的一款分布式服务框架.而Spring Boot则是Spring社区这两年致力于打造的简化Java配置的微服务框架. 利用他们各自优势,配置到 ...

  10. 适合WebApi的简单的C#状态机实现

    目标 采用了Restful WebApi的架构,再把业务逻辑状态转移放到后端就有点违背初衷了.实际上只要后端Api的权限设置的好,把状态转移放到前端也未尝不可.我考虑的结果是,一般如果变更这个状态本身 ...