ASP.NET Core+LayUI+MySql CMS管理后台,主要功能包括 登录、修改密码,账号管理,菜单管理,角色权限管理等

由于工作之外,抽时间写的,用于学习交流,请慎重用于生产环境

项目概要

CMS管理后台包含的功能有 登录、修改密码、账号管理(账号列表,添加,修改,删除,禁/启用,解锁)、菜单管理(菜单列表,添加,修改,删除,禁/启用)、角色权限管理(角色列表,添加,修改,删除,禁/启用,分配权限)等后台最基础的功能。

CMS管理后台使用的ASP.NET Core MVC模式,LayUI做的前端页面,Mysql做的数据存储,Razor页面引擎

登录加入图片验证码,验证码保存在Session中,Cookie+AES加密保存用户登录状态,密码使用MD5加密保存在数据库

使用 AuthorizationFilter 过滤器判断用户的登录状态和操作权限,权限判断基于Controller和Action

表单数据提交采用ajax提交,页面的展示与数据提交一般共用同一个 Action,

1. 像添加、修改、分配权限等通过 if (!Request.Method.ToUpper().Equals("POST", StringComparison.OrdinalIgnoreCase) || !Request.HasFormContentType) 来区分是显示页面还是提交请求

2. 像账号列表、菜单列表、权限列表等通过 if (id == null || !id.ToUpper().Equals("DATA", StringComparison.OrdinalIgnoreCase)) 来区分是显示页面还是返回数据列表

使用依赖注入,面向切面来实现业务,减少藕尔,使代码也易于管理

软件版本

ASP.NET Core:2.1

MySql:5.6

LayUI:2.4.5

jquery:3.3.1

项目结构

Database:数据库脚本,包括建库、建表、数据初始化等脚本

Snai.CMS:代码目录

wwwroot:js,css,image等静态文件

Business:业务实现,登录,账号管理,角色管理,菜单管理等实现

Common:公共基础的方法类库,加解密,AuthorizationFilter过滤器,验证码实现,时间戳,随机数,密码复杂度检查,系统一些常量等

Controllers:控制器,加入了ControllerBase继承Controller,其他控制器继承ControllerBase,主要是 抽出GetLayoutModel(),再通过泛型 ToT<T>(ref T t) 方法,得到子类页面Model,简化控制器取 LayoutModel Model值

DataAccess:数据库操作

Entities:实体对象

Models:模型

Views:视图

 

项目介绍

一、CMS数据库 snai_cms

数据表 管理员表(admins),菜单表(modules),角色表(roles),权限表(role_right)

时间以utc时间戳保存,ORM使用EFCore操作数据库

二、登录

登录的 用户名、密码、验证码 都正确才能登录成功,登录成功跳转到后台首页

默认的用户名:snai,密码:snai2019

如果在30分钟内,密码错误3次,将锁定账号30分钟,这里的时间和错误次数可以在appsettings.json配置

"LogonSettings": {
     "ErrorCount": 3,  //错误次数
     "ErrorTime": 30,  //单位时间内错误的时间
     "LockMinute": 30  //锁定时间
   }

每次登录不管成功还是失败都会刷新验证码,验证码保存在 Session,有效时间15分钟

登录成功后,登录用户 Token(用户名,密码,随机码)通过 AES 加密保存在 Cookie 中,登录 Cookie 的有效期为关掉浏览器过期,AES加密密钥在appsettings.json配置

"WebSettings": {
     "CipherKey": "wEd5cxs0xUZe6WBCTUFIMJIDRnLZYWG9",   //AES加密密钥
     "WebTitle": "CMS管理后台"  //管理后台名称
   }

通过 AuthorizationFilter 过滤器判断登录和权限,除了登录和退出,其他页面和操作都需要登录和相应权限,权限判断是通过用户角色,Controller和Action 对应的菜单来判断

三、登录信息和修改密码

登录信息 主要显示当前登录IP和登录时间

修改密码  可以通过旧密码来修改密码,密码要求 至少6位,且必须是字母与(数字或特殊符号)组合

右上角,包括退出按钮,用于退出后台

四、后台设置

后台设置包括 管理员管理,管理员管理包括 账号管理、菜单管理、角色管理

1、账号管理 主要包括 账号列表,添加,修改,删除,禁/启用,解锁等操作

2、菜单管理 主要包括 菜单列表,添加,修改,删除,禁/启用等操作

3、角色管理 主要包括 角色列表,添加,修改,删除,禁/启用,分配权限等操作

分配权限 除了登录和退出,其他页面和操作都需要权限

 

开发时的一些注意

1. 注册HttpContext,用于在Controller之外的地方使用

services.AddHttpContextAccessor();

2. appsettings.json 中文乱码,如配置文件里有中文,保存时默认GB2312格式,改为UTF-8

3. View 文件不编译 <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>

4. View 使用Model

@{
ViewData.Model = new NoUserRoleModel()
{
PageTitle = "没有权限访问",
WebTitle = "CMS管理后台"
};
}

5. Razor里的代码块html标签跨了代码段时,视图会报错

如:下面这种写法就会报错

    @if(...){
<li class='layui-nav-item'>
}
</li>
正确写法
@if(...){
<li class='layui-nav-item'></li>
}

@if(...){
@Html.Raw("<li class='layui-nav-item'>")
}
@Html.Raw("</li>")

6. 加基类控制器 ControllerBase : Controller,抽出GetLayoutModel(),再通过泛型 ToT<T>(ref T t) 方法,得到子类页面Model, 简化控制器取 LayoutModel Model值

7. layui重新渲染后的单选按钮,选择后直接用 $("input[name='state']:checked").val() 是取不值的(用layui的表单取值不确定是否

能取到)后面用layui监听事件,监听按钮选择修改原单选按钮选中状态,然后再用 $("input[name='state']:checked").val() 取值

    MA.layui.form.on('radio(state)', function (data) {
if (data.value == 1) {
MA.Form.state1.attr("checked", true);
MA.Form.state2.attr("checked", false);
} else {
MA.Form.state1.attr("checked", false);
MA.Form.state2.attr("checked", true);
}
});

8. 对于checkbox提交,用 jquery 组合成数组提交

    var moduleIDs =[];
$("input[name='moduleIDs']:checked").each(function(){
moduleIDs.push($(this).val());
}); //请求参数
var params = {
roleID: MRR.Form.roleID.val(),
moduleIDs: moduleIDs
};

9. 对于分配权限时checkbox选择与联动选择,也用的是layui监听事件MRR.layui.form.on('checkbox(moduleIDs)', function (data) {}); 来设置原checkbox的值

对于联动后重新渲染checkbox用MRR.layui.form.render('checkbox'),要注意用prop而不用attr,$(this).prop("checked", false),否则已经做过选择复选框联动无效

菜单层级

后台配置

--------管理员管理

-----------------账号管理

--------------------------添/删/改等账号

Github源码地址:https://github.com/Liu-Alan/Snai.CMS

 
 
 

ASP.NET Core CMS管理后台的更多相关文章

  1. Orchard Core一分钟搭建ASP.NET Core CMS

    Orchard Core 是Orchard CMS的ASP.NET Core版本. Orchard Core是全新一代的ASP.NET Core CMS. 官方文档介绍:http://orchardc ...

  2. ASP.NET Core会议管理平台实战_汇总贴

    ASP.NET Core会议管理平台实战 课程地址:https://ke.qq.com/course/389673?from=800004097#term_id=100464670 ASP.NET C ...

  3. Asp.Net Core IdentityServer4 管理面板集成

    前言 IdentityServer4(以下简称 Id4) 是 Asp.Net Core 中一个非常流行的 OpenId Connect 和 OAuth 2.0 框架,可以轻松集成到 Asp.Net C ...

  4. ASP.NET Core 包管理工具(4)

    之前忘记介绍ASP.NET Core静态文件wwwroot了.再来补充一下.步骤比较简单在项目上右击添加文件夹输入文件名称 wwwroot就搞定了.这个文件主要是放置一些静态文件的,比如css.js. ...

  5. ASP.NET Core会议管理平台实战_3、认证、授权表迁移

    可以参考老张的这个文章: https://www.cnblogs.com/laozhang-is-phi/p/10660403.html 创建这个类库 看一下IdentityUser是在哪一个库下面. ...

  6. ASP.NET Core会议管理平台实战_4、参数校验、操作结果封装,注册参数配置

    登陆和注册之前,需要封装 前端参数的校验,ajax的封装 参数校验,创建公共的类 ,它是一个静态类 这样在调用的时候,直接一句话就可以了,这就是封装的好处 空字符串的校验 调用方式 EF的源码里面有这 ...

  7. asp.net core 2.0 后台定时自动执行任务

    自己写一个类继承BackgroundService internal class RefreshService : BackgroundService { protected override asy ...

  8. ASP.NET Core会议管理平台实战_2、基本概念的理解

    id Token携带用户的信息 AccessToken:是否有权限访问资源 看数据库的表,Client相关的表,api的相关的表 Resources把用户的简介抽象出来到IdentityClaims表 ...

  9. ASP.NET Core会议管理平台实战_1、开篇介绍

    用到四个数据库

随机推荐

  1. mysql 清空所有表数据重置自增ID

    1.登录mysql客户端 mysql -u root -p 输入密码进入 2.生成 sql 语句文件 SELECT CONCAT('TRUNCATE TABLE ',TABLE_NAME,';') i ...

  2. rabbitmq安装.教程

    https://www.cnblogs.com/ericli-ericli/p/5902270.html (rabbitmq安装)https://www.cnblogs.com/iiwen/p/538 ...

  3. .NET获取城市信息(将三字代码转换成城市名)

    整理代码,发现有一个从两张表里读取城市列表,然后linq和lambda表达式来获取城市名的函数,代码如下: public static string GetCityHotelText(string c ...

  4. CRC标准以及简记式

    一.CRC标准 下表中列出了一些见于标准的CRC资料: 名称 生成多项式 简记式* 应用举例 CRC-4 x4+x+1 3 ITU G.704 CRC-8 x8+x5+x4+1 31 DS18B20 ...

  5. SpringBoot中文乱码解决方案

    转载:https://blog.csdn.net/wangshuang1631/article/details/70753801 方法一,修改application.properties文件 增加如下 ...

  6. [C#]RichTextBox实现拖放

    amespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { InitializeC ...

  7. linux下导入导出数据库

    导入导出数据库用mysqldump命令,使用方法与mysql命令类似. 导出 导出sql(包含数据和表结构):mysqldump -uroot -p dbname > dbname.sql 导出 ...

  8. Devexpress VCL Build v2015 vol 15.1.2发布

    2015年马上过半年了.终于第一个大版出来了. What's New in 15.1.2 (VCL Product Line)   New Major Features in 15.1 What's ...

  9. 使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    虽然现在JS做报表和图形展示已经非常普遍和漂亮了,但是不能忽略有jfreechart 这样一种东西! 这些翻阅资料,在看以前写的示例时发现了关于jfreechart 的简单示例,不管怎样发上来分享一下 ...

  10. 31、iOS 正则表达式判断UITextField是否为全汉字,全字母,全数字,数字和字母

    判断全汉字 if ([self deptNameInputShouldChinese]) { [DemonAlertHelper showToastWithMessage:@"只能是中文&q ...