lin-cms-dotnetcore功能模块的设计

先来回答以下问题。可拉到最下面查看预览图。

1.什么是cms?

Content Management System,内容管理系统。

2.dotnetcore是什么?

.NET Core,是由Microsoft开发,目前在.NET Foundation(一个非营利的开源组织)下进行管理,采用宽松的MIT协议,可构建各种软件,包括Web应用程序、移动应用程序、桌面应用程序、云服务、微服务、API、游戏和物联网应用程序。

GitHub第三方授权登录

有许多文章都讲过GitHub第三方授权登录,但就是没有.NET Core配合前后端分离的项目(Vue,React)的实践。所以本文以前后端分离项目中如何在授权登录后,生成Token的过程。

后端 .NET Core,使用类库AspNet.Security.OAuth.GitHub

前端技术栈如下:VUE+Vue-Router+axios

2019-10-12

  |  


title: lin-cms-dotnetcore的开源之路
date: 2019-10-8 12:44:22
tags:

  • 开源
  • .NET Core
  • lin-cms
    category:
  • lin-cms-dotnetcore

开源lin-cms-dotnetcore

基于RBAC实现权限设计

功能:实现一个用户设置多个分组,分组可以设置多个权限,权限与后台API方法对应,前端菜单绑定权限编码,前端按钮绑定权限编码,从而实现用户可配置权限,从而控制界面上的元素等。

1. 用户表 lin_user

字段 备注 类型
id 主键Id bigint
username 用户名 varchar
nickname 昵称 varchar
phone_number 手机号 varchar
avatar 用户默认生成图像,为null、头像url varchar
email 电子邮箱 varchar
active 1激活 2 非激活 int

2. 分组表 lin_group

字段 备注 类型
id 主键Id bigint
name 权限组名称 varchar
info 权限组描述 varchar
is_static 是否是静态分组 bit

3. 用户分组表 lin_user_group

用户分组表。用于用户和分组表的关联。可配置一个用户属于多个分组。

字段 备注 类型
id 主键Id bigint
user_id 用户ID bigint
group_id 分组ID bigint

4. 权限表 lin_permission

权限表,本系统通过反射在系统初次启动时,启动异步任务,将不存在的权限新增到此表中。

字段 备注 类型
id 主键Id bigint
module 权限所属模块,例如:人员管理 varchar
name 所属权限、权限名称,例如:访问首页 varchar

5. 分组权限表 lin_group_permission

分组权限表,用于分组与权限表的关联

字段 备注 类型
id 主键Id bigint
group_id 分组Id bigint
permission_id 权限Id bigint

6. 用户三方授权登录表 lin_user_identity

用户授权信息表,用于存储不同登录类型的用户信息,如手机号、邮件、用户名、第三方应用(微信、QQ、GitHub)的登录

字段 备注 类型
id char 主键Id
identity_type varchar 认证类型Password,GitHub、QQ、WeiXin等
identifier varchar 认证者,例如 用户名,手机号,邮件等,
credential varchar 凭证,例如 密码,存OpenId、Id,同一IdentityType的OpenId的值是唯一的
create_user_id bigint 绑定的用户Id
create_time datetime

字典管理

主要功能:仅限于通用的下拉列表选择,有变化的可能性。抽象成统一的配置项。

比如:文章是(原创,转载,翻译),性别是(男,女)。当然更多,在下文会有介绍。

1.base_type (字典类别管理)

字段 类型 备注
id int
type_code varchar(50) 类别编码
full_name varchar(50) 全称
sort_code int 排序码

2.base_item (字典管理)

字段 类型 备注
id int
base_type_id int 类别id(关联base_type的id)
item_code varchar(50) 字典编码
item_name varchar(50) 字典全称
sort_code int 排序码

BaseType 1 对BaseItem多。

如:标签管理,一个文章下可以设置多个标签,原本需要设计表Tag,字段也大抵为Id,Name,Sort及关联表。
我们使用BaseType、BaseItem实现。
BaseType中TypeCode为tag,FullName为标签,id为1时。
BaseItem中BaseTypeId为1,ItemCode为编码,ItemName为标签。ItemCode为不重复的字符串即可。

另Tag与Article的关联表,需要另设计一个表。

当我们要实现文章类别的下拉,原本需要设计一个表ArticleType,有字段,id,name,sort等。
我们可以通过BaseType、BaseItem来实现,从而简化这些基础数据。
BaseType有一条数据,TypeCode为 字符串category、FullName文章类别,BaseItem存多个文章类别(Java、大数据、Python、C#等),编码不同即可。

但现实总是事与愿违,后台取文章列表时,想要取出文章对应的分类,手动join时,总觉得join的表会有些奇怪。

当然还有其他原因,局限性

  1. 比如使用了这个字典,分类需要增加一个图片字段,就不能满足要求,那怎么办呢,做不了。
  2. 比如标签需要实现这个标签下有多少个文章,通过统计也能实现,

使用FreeSql实现时,如果二个表之间没有导航属性,是更复杂的。

##

lin_file文件存储

字段 类型 备注
id bigint
extension varchar 后缀
md5 varchar 图片md5值,防止上传重复图片
name varchar 名称
path varchar 路径
size bigint 大小
type smallint 1 local,2 代表七牛云 3 其他表示其他地方
create_user_id bigint 创建者ID

lin_log 日志记录

字段 类型 备注
id bigint 主键Id
authority varchar 访问哪个权限
message varchar 日志信息
method varchar 请求方法
path varchar 请求路径
status_code int 请求的http返回码
time datetime 日志创建时间
user_id bigint 用户id
user_name varchar 用户当时的昵称
other_message longtext

book 书(demo)

字段 类型 备注
id bigint 主键Id
author varchar 作者
image varchar 图片
summary varchar 简介
title varchar 标题

基于RBAC实现权限设计

功能:实现一个用户设置多个分组,分组可以设置多个权限,权限与后台API方法对应,前端菜单绑定权限编码,前端按钮绑定权限编码,从而实现用户可配置权限,从而控制界面上的元素等。

1. 用户表 lin_user

字段 备注 类型
id 主键Id bigint
username 用户名 varchar
nickname 昵称 varchar
phone_number 手机号 varchar
avatar 用户默认生成图像,为null、头像url varchar
email 电子邮箱 varchar
active 1激活 2 非激活 int

2. 分组表 lin_group

字段 备注 类型
id 主键Id bigint
name 权限组名称 varchar
info 权限组描述 varchar
is_static 是否是静态分组 bit

3. 用户分组表 lin_user_group

用户分组表。用于用户和分组表的关联。可配置一个用户属于多个分组。

字段 备注 类型
id 主键Id bigint
user_id 用户ID bigint
group_id 分组ID bigint

4. 权限表 lin_permission

权限表,本系统通过反射在系统初次启动时,启动异步任务,将不存在的权限新增到此表中。

字段 备注 类型
id 主键Id bigint
module 权限所属模块,例如:人员管理 varchar
name 所属权限、权限名称,例如:访问首页 varchar

5. 分组权限表 lin_group_permission

分组权限表,用于分组与权限表的关联

字段 备注 类型
id 主键Id bigint
group_id 分组Id bigint
permission_id 权限Id bigint

6. 用户三方授权登录表 lin_user_identity

用户授权信息表,用于存储不同登录类型的用户信息,如手机号、邮件、用户名、第三方应用(微信、QQ、GitHub)的登录

字段 备注 类型
id char 主键Id
identity_type varchar 认证类型Password,GitHub、QQ、WeiXin等
identifier varchar 认证者,例如 用户名,手机号,邮件等,
credential varchar 凭证,例如 密码,存OpenId、Id,同一IdentityType的OpenId的值是唯一的
create_user_id bigint 绑定的用户Id
create_time datetime

字典管理

主要功能:仅限于通用的下拉列表选择,有变化的可能性。抽象成统一的配置项。

比如:文章是(原创,转载,翻译),性别是(男,女)。当然更多,在下文会有介绍。

1.base_type (字典类别管理)

字段 类型 备注
id int
type_code varchar(50) 类别编码
full_name varchar(50) 全称
sort_code int 排序码

2.base_item (字典管理)

字段 类型 备注
id int
base_type_id int 类别id(关联base_type的id)
item_code varchar(50) 字典编码
item_name varchar(50) 字典全称
sort_code int 排序码

BaseType 1 对BaseItem多。

如:标签管理,一个文章下可以设置多个标签,原本需要设计表Tag,字段也大抵为Id,Name,Sort及关联表。
我们使用BaseType、BaseItem实现。
BaseType中TypeCode为tag,FullName为标签,id为1时。
BaseItem中BaseTypeId为1,ItemCode为编码,ItemName为标签。ItemCode为不重复的字符串即可。

另Tag与Article的关联表,需要另设计一个表。

当我们要实现文章类别的下拉,原本需要设计一个表ArticleType,有字段,id,name,sort等。
我们可以通过BaseType、BaseItem来实现,从而简化这些基础数据。
BaseType有一条数据,TypeCode为 字符串category、FullName文章类别,BaseItem存多个文章类别(Java、大数据、Python、C#等),编码不同即可。

但现实总是事与愿违,后台取文章列表时,想要取出文章对应的分类,手动join时,总觉得join的表会有些奇怪。

当然还有其他原因,局限性

  1. 比如使用了这个字典,分类需要增加一个图片字段,就不能满足要求,那怎么办呢,做不了。
  2. 比如标签需要实现这个标签下有多少个文章,通过统计也能实现,

使用FreeSql实现时,如果二个表之间没有导航属性,是更复杂的。

##

lin_file文件存储

字段 类型 备注
id bigint
extension varchar 后缀
md5 varchar 图片md5值,防止上传重复图片
name varchar 名称
path varchar 路径
size bigint 大小
type smallint 1 local,2 代表七牛云 3 其他表示其他地方
create_user_id bigint 创建者ID

lin_log 日志记录

字段 类型 备注
id bigint 主键Id
authority varchar 访问哪个权限
message varchar 日志信息
method varchar 请求方法
path varchar 请求路径
status_code int 请求的http返回码
time datetime 日志创建时间
user_id bigint 用户id
user_name varchar 用户当时的昵称
other_message longtext

book 书(demo)

字段 类型 备注
id bigint 主键Id
author varchar 作者
image varchar 图片
summary varchar 简介
title varchar 标题

基于RBAC实现权限设计

功能:实现一个用户设置多个分组,分组可以设置多个权限,权限与后台API方法对应,前端菜单绑定权限编码,前端按钮绑定权限编码,从而实现用户可配置权限,从而控制界面上的元素等。

1. 用户表 lin_user

字段 备注 类型
id 主键Id bigint
username 用户名 varchar
nickname 昵称 varchar
phone_number 手机号 varchar
avatar 用户默认生成图像,为null、头像url varchar
email 电子邮箱 varchar
active 1激活 2 非激活 int

2. 分组表 lin_group

字段 备注 类型
id 主键Id bigint
name 权限组名称 varchar
info 权限组描述 varchar
is_static 是否是静态分组 bit

3. 用户分组表 lin_user_group

用户分组表。用于用户和分组表的关联。可配置一个用户属于多个分组。

字段 备注 类型
id 主键Id bigint
user_id 用户ID bigint
group_id 分组ID bigint

4. 权限表 lin_permission

权限表,本系统通过反射在系统初次启动时,启动异步任务,将不存在的权限新增到此表中。

字段 备注 类型
id 主键Id bigint
module 权限所属模块,例如:人员管理 varchar
name 所属权限、权限名称,例如:访问首页 varchar

5. 分组权限表 lin_group_permission

分组权限表,用于分组与权限表的关联

字段 备注 类型
id 主键Id bigint
group_id 分组Id bigint
permission_id 权限Id bigint

6. 用户三方授权登录表 lin_user_identity

用户授权信息表,用于存储不同登录类型的用户信息,如手机号、邮件、用户名、第三方应用(微信、QQ、GitHub)的登录

字段 备注 类型
id char 主键Id
identity_type varchar 认证类型Password,GitHub、QQ、WeiXin等
identifier varchar 认证者,例如 用户名,手机号,邮件等,
credential varchar 凭证,例如 密码,存OpenId、Id,同一IdentityType的OpenId的值是唯一的
create_user_id bigint 绑定的用户Id
create_time datetime

字典管理

主要功能:仅限于通用的下拉列表选择,有变化的可能性。抽象成统一的配置项。

比如:文章是(原创,转载,翻译),性别是(男,女)。当然更多,在下文会有介绍。

1.base_type (字典类别管理)

字段 类型 备注
id int
type_code varchar(50) 类别编码
full_name varchar(50) 全称
sort_code int 排序码

2.base_item (字典管理)

字段 类型 备注
id int
base_type_id int 类别id(关联base_type的id)
item_code varchar(50) 字典编码
item_name varchar(50) 字典全称
sort_code int 排序码

BaseType 1 对BaseItem多。

如:标签管理,一个文章下可以设置多个标签,原本需要设计表Tag,字段也大抵为Id,Name,Sort及关联表。
我们使用BaseType、BaseItem实现。
BaseType中TypeCode为tag,FullName为标签,id为1时。
BaseItem中BaseTypeId为1,ItemCode为编码,ItemName为标签。ItemCode为不重复的字符串即可。

另Tag与Article的关联表,需要另设计一个表。

当我们要实现文章类别的下拉,原本需要设计一个表ArticleType,有字段,id,name,sort等。
我们可以通过BaseType、BaseItem来实现,从而简化这些基础数据。
BaseType有一条数据,TypeCode为 字符串category、FullName文章类别,BaseItem存多个文章类别(Java、大数据、Python、C#等),编码不同即可。

但现实总是事与愿违,后台取文章列表时,想要取出文章对应的分类,手动join时,总觉得join的表会有些奇怪。

当然还有其他原因,局限性

  1. 比如使用了这个字典,分类需要增加一个图片字段,就不能满足要求,那怎么办呢,做不了。
  2. 比如标签需要实现这个标签下有多少个文章,通过统计也能实现,

使用FreeSql实现时,如果二个表之间没有导航属性,是更复杂的。

##

lin_file文件存储

字段 类型 备注
id bigint
extension varchar 后缀
md5 varchar 图片md5值,防止上传重复图片
name varchar 名称
path varchar 路径
size bigint 大小
type smallint 1 local,2 代表七牛云 3 其他表示其他地方
create_user_id bigint 创建者ID

lin_log 日志记录

字段 类型 备注
id bigint 主键Id
authority varchar 访问哪个权限
message varchar 日志信息
method varchar 请求方法
path varchar 请求路径
status_code int 请求的http返回码
time datetime 日志创建时间
user_id bigint 用户id
user_name varchar 用户当时的昵称
other_message longtext

book 书(demo)

字段 类型 备注
id bigint 主键Id
author varchar 作者
image varchar 图片
summary varchar 简介
title varchar 标题


Copyright © 2019 、天上有木月博客 All Rights Reserved. by igeekfan. | 苏ICP备16046457号 | 本站运行于

本站开源 天上有木月 至Github , 总访问量为 次 。 载入天数...载入时分秒...