asp.net cms mysql_ASP.NET Core CMS管理后台

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

因为工做以外,抽时间写的,用于学习交流,请慎重用于生产环境html

项目概要前端

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

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

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

使用 AuthorizationFilter 过滤器判断用户的登陆状态和操做权限,权限判断基于Controller和Actionajax

表单数据提交采用ajax提交,页面的展现与数据提交通常共用同一个 Action,sql

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

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

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

软件版本

ASP.NET Core:2.1

MySql:5.6

LayUI:2.4.5

jquery:3.3.1

项目结构

ba24f635c345c6128c5d0968c30e0c49.png

18ccd2ac5062aa15e72f37520b55a9f1.png

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

Snai.CMS:代码目录

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

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

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

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

DataAccess:数据库操做

Entities:实体对象

Models:模型

Views:视图

项目介绍

1、CMS数据库 snai_cms

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

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

234d6dc595af79eea7af895adad3112e.png

2、登陆

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

默认的用户名: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 对应的菜单来判断

9ffbecaca66cd7454e7e737da74d1431.png

c5b87d70c0510ddd84cd5ab626a14043.png

3、登陆信息和修改密码

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

aa55701a634d51ca2d3a8d7026cac195.png

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

0bbf8cbf6c7d50a0a9c17158f1314b98.png

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

007228cc6fb9ca9c99d2a2d32fd8bd00.png

4、后台设置

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

36ec74bfa10951591481b5d8ea1c728c.png

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

6dab5367dc0569b94e55b84ea39ca43e.png

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

f63136f6f0568fdf8f8921a7cb400519.png

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

afced03facc8233c47952102e7799160.png

分配权限 除了登陆和退出,其余页面和操做都须要权限

9f0e00ad5aa5483b79e22fc9b52baab5.png

开发时的一些注意

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

services.AddHttpContextAccessor();

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

3. View 文件不编译 false

4. View 使用Model

@{

ViewData.Model = new NoUserRoleModel()

{

PageTitle = "没有权限访问",

WebTitle = "CMS管理后台"

};

}

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

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

@if(...){

}

正确写法

@if(...){

}

@if(...){

@Html.Raw("

")

}

@Html.Raw("

")

6. 加基类控制器 ControllerBase : Controller,抽出GetLayoutModel(),再经过泛型 ToT(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),不然已经作过选择复选框联动无效

菜单层级

后台配置

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

-----------------帐号管理

--------------------------添/删/改等帐号

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值