ASP.NET Core CMS管理后台
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操作数据库
二、登录
登录的 用户名、密码、验证码 都正确才能登录成功,登录成功跳转到后台首页
如果在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),否则已经做过选择复选框联动无效
菜单层级
后台配置
-------------管理员管理
-----------------------------账号管理
------------------------------------------添/删/改等账号
源码访问地址:https://github.com/liu-alan/snai.cms
推荐阅读
-
ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
-
.Net Core 3.0开源可视化设计CMS内容管理系统建站系统
-
Asp.Net Core 轻松学-基于微服务的后台任务调度管理器
-
asp.net后台管理系统-登陆模块-路由权限控制_1
-
ASP.NET MVC5网站开发之用户角色的后台管理1(七)
-
.Net Core 3.0开源可视化设计CMS内容管理系统建站系统
-
Asp.net Core中如何使用中间件来管理websocket
-
ASP.NET MVC5+EF6+EasyUI后台管理系统 微信公众平台开发之消息管理
-
ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统之前端页面框架构建源码分享
-
.NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程