NET核心项目实战权限管理系统(5)用户登录-研发项目管理

>>NET核心项目实战权限管理系统(5)用户登录-研发项目管理

NET核心项目实战权限管理系统(5)用户登录-研发项目管理

引言:当今社会市场竞争激烈,软件开发企业想要占据前列需要在研发管理上下功夫,“向管理要效益”已经成为软件开发企业的共识,研发项目管理在软件企业中的普及也是大势所趋。国内做软件项目管理工具的开发商翼发云近几年发展十分迅速,越来越多的软件开发企业认识到研发项目管理的重要性,能切实有效降低成本,规范软件开发流程,提高软件产品质量。国内研发项目管理系统、敏捷开发管理工具的领导品牌翼发云敏捷项目管理系统采用可视化业务流程技术,支持瀑布模型等传统软件研发项目管理,同时也支持scrum等敏捷开发流程,是理想的敏捷开发管理工具,涵盖软件项目管理工作的整个生命周期。为提高国内软件开发企业的项目管理水平,分享一篇企业管理相关的知识文章。

0 ASP.NET核心项目物权管理系统(0)

1 ASP。NET核心项目实战的权限管理系统(1)使用adminlte建立前端 scrum

2 ASP.NET核心项目实战权限管理系统(2)功能与实体设计

3 ASP。NET核心项目真正的版权管理系统(3)通过使用PostgreSQL EntityFramework核心 软件项目管理

4 ASP.NET核心项目物权管理系统(4)依赖于多项目分层实施注入、仓储和服务。

5 ASP.NET核心项目实战权限管理系统(5)用户登录 敏捷开发流程

6 ASP.NET核心项目实战权限管理系统(6)功能管理

7 ASP.NET核心项目版权管理系统(7)组织、角色、用户权限 研发项目管理

8 ASP.NET核心项目版权管理系统(8)功能菜单动态加载

GitHub源地址

0使用TagHelper

TagHelper是Asp.Net Core中提供的全新的服务端代码参与创建和渲染 HTML 元素的方法,TagHelpers 在 Razor视图中减少或避免了 HTML 和 C# 之间的显示转换,它具有以下特点:

  • 一个友好的HTML开发经验

Razor 标记使用 Tag Helpers 看起来更像标准的 HTML。熟悉 HTML/CSS/JavaScript 的前端设计师在没有学习 C# Razor 语法的情况下能够编辑 Razor 。

  • 提供丰富的智能感知环境,以创建HTML和刀片标记。

通过Microsoft.AspNetCore.Razor.Tools提供智能感知和智能提醒,大大提高编码效率。

  • 在服务器端提供更强大、更可靠、更易于维护的代码的HTML呈现

TagHelper的使用一般放在“视图导入页”中,视图导入页中还会放置我们会用到的服务端引用。

0创建视图导入页面

在Fonour.MVC项目中,右键Views文件夹,添加新项,选择MVC视图导入页,添加一个默认名称为 “_ViewImports.cshtml”的视图导入页。

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

修改视图导入页的内容如下:

“addtaghelper *,microsoft.aspnetcore.mvc.taghelpers

0.1使用microsoft.aspnetcore.razor.tools

Microsoft.AspNetCore.Razor.Tools能够提供TagHelper的智能感知提示和代码加粗高亮显示。

  • 通过NuGet安装包管理
  • 安装&nbsp通过NuGet包控制台;
  • 对project.json直接修改

最终在project.json文件中的dependencies及tools配置节中会出现Microsoft.AspNetCore.Razor.Tools

“Dependencies”: {“Microsoft.NETCore.App”: “1.0.1”, “Microsoft.AspNetCore.Diagnostics”, “1.0.0”, “Microsoft.AspNetCore.Server.IISIntegration”, “1.0.0”, “Microsoft.AspNetCore.Server.Kestrel”, “1.0.1”, “Microsoft.Extensions.Logging.Console”, “1.0.0”, “Microsoft.AspNetCore.Mvc”, “1.0.1”, “Microsoft.AspNetCore.StaticFiles”, “1.0.0”, “Microsoft.Extensions.Configuration” “1.0.0”, “Microsoft.Extensions.Configuration.FileExtensions”, “1.0.0”, “Microsoft.Extensions.Configuration.Json”, “1.0.0”, “Fonour.Application”, “1.0.0-*”, “Microsoft.AspNetCore.Razor.Tools”, “1.0.0-preview2-final”, “Microsoft.AspNetCore.Session”, “1.0.0”, “Fonour.Utility”: “1.0.0-*”}, {“tools”: “Microsoft.AspNetCore.Server.IISIntegration.Tools” “1.0.0-preview2-final”, “Microsoft。aspnetcore。剃刀工具”:“1.0.0-preview2-final”},

打开Login/Index.cshtml文件,随意输入一个label标签,发现已经可以出现asp-for的TagHelper提示。

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

一个完整的使用TagHelper的label标签创建完成后,会以加粗高亮的方式显示。你自己可以根据喜好在 工具 > 选项 > 环境 > 字体和颜色 中自定义TagHelperElement的字体和颜色。更多关于TagHelper的使用,可以找专门的文章进行了解。

注意:如果你安装microsoft.aspnetcore.razor.tools没有智能提示,重新启动Visual Studio。

会话中间件在1 ASP.NET核心中的应用

我们需要在用户登录以后记录当前登录用户的会话状态,ASP.NET Core 发布了一个关于会话的程序包,里面提供了用于管理会话状态的中间件。你可以在 project.json 中加入对Microsoft.AspNetCore.Session的引用来安装这个程序包。

1 microsoft.aspnetcore.session使用

0 microsoft.aspnetcore.session依赖加

通过NuGet程序包管理器、控制台、或直接修改project.json文件,添加对Microsoft.AspNetCore.Session中间件的引用。

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

1修改的startup.cs的configureservices文件的方法提高会议服务的注册

公共无效configureservices(iservicecollection服务){ //获取数据库连接字符串变量sqlConnectionString = configuration.getconnectionstring(“违约”);/ /添加数据上下文的服务。adddbcontext & lt(选项;fonourdbcontext >= & gt;options.usenpgsql(sqlConnectionString));服务。addscoped <iuserrepository;服务。addscoped & lt;userrepository >(iuserappservice),userappservice & gt(服务。addmvc);;(/ /会议);服务(服务。addsession);}

2修改配置文件的方法startup.cs,管道中的请求的会话

公共无效配置(iapplicationbuilder APP,ihostingenvironment env,iloggerfactory loggerfactory){ loggerfactory.addconsole();如果(env.isdevelopment()){ //发展环境app.usedeveloperexceptionpage异常处理();}否则{ /生产环境异常处理app.useexceptionhandler(“/共享/错误”);} // app.usestaticfiles(静态文件);//会话(APP。usesession);//使用MVC,设置默认路由系统日志app.usemvc(路线= & gt;{ routes.maproute(名称:“默认”的模板:“{ }或{登录控制器=行动=指数}、{身份证吗?}”);});seeddata。初始化(程序。应用服务);//初始化数据}

1.1字节的数组和对象变换的帮助类byteconverthelper

Asp.NET核心中的会话设置方法必须提供一个字节数组来存储对象。此外,为方便起见,如果和setint32扩展还提供方法。

无效集(字符串键,字节值);

我们在Fonour.Utility项目中增加一个Byte数组与对象互相转换的帮助类ByteConVertHelper。

Public class ByteConvertHelper {/ / / < summary> / / / / / / convert an object to an array of byte < /summary> / / / < param name= > “obj” is converted < /param> returns> / / / < after the conversion byte array < /returns&gt public; static byte[] Object2Bytes (object obj) {string JSON = JsonConvert.SerializeObject (obj); byte[] serializedResult = System.Text.Encoding.UTF8.GetBytes (JSON); return serializedResult;} / / / / / / < summary> byte array pairs like /summary> / / / &lt / / / < param; > name= “buff” byte is converted array < /param> returns> / / / < after the conversion of the object < /returns&gt public; static object Bytes2Object (byte[] buff) { String JSON = System.Text.encoding.utf8.getstring(黄色);返回JsonConvert。deserializeobject &lt;对象&gt;(JSON);} / / / / / / & lt;总结& gt;字节将被转换成对象/ / / & lt数组;/摘要&gt;/ / / & lt;参数名= & gt;“黄色”转换为字节数组&lt;/参数&gt;返回&gt;/ / / &lt;&lt对象的返回/ & gt后转换;公共的;静止的T bytes2object &lt;T & gt(byte [];buff){ json串= system.text.encoding.utf8.getstring(buff);返回JsonConvert。deserializeobject &lt;T & gt;(JSON);} }

2用户登录实现

有了以上准备工作,我们可以开始正式实现用户登录功能了。

2模型

在Fonour.MVC项目中增加一个Models文件夹,用于存放前端交互使用的Model类,在Models文件夹下新建一个LoginModel类,并通过DataAnnotations特性指定属性的验证信息。

公共课loginmodel { [要求(错误信息=“用户名不能为空。] ]公共字符串用户名{得到;集;} [要求(ErrorMessage =”)密码不能为空。] ] ] [数据类型(数据类型。密码)]公共字符串密码{得到;集;} public bool记得{有} };集。

在视图导入页_ViewImport.cshtml中增加对模型的引用

“使用fonour.mvc.models

2.1视图

使用TagHelper修改Login/Index.cshtml为如下内容

“{ }”模式布局= null;loginmodel &lt;DOCTYPE html & gt;& lt!HTML;GT;和;;;;;标题!Tell responsive to screen width –> &lt meta; content= width= device-width, initial-scale=1, maximum-scale=1, user-scalable=no “name=” viewport > < link “rel=” stylesheet “href=” ~/lib/bootstrap/dist/css/bootstrap.css “> &lt link; rel=” stylesheet “href=” ~/lib/font-awesome/css/ font-awesome.css &gt “; &lt link; rel=” stylesheet “href=” ~/css/AdminLTE.css “> &lt link; rel=” stylesheet “href=” ~/lib/iCheck/skins/square/blue.css “> < /head> < body class=” hold-transition login-page “&gt div class=” login-box; < > < div “class=” login-logo “> < a href= “http://fonour.cnblogs.com” target= “_blank” > < b> Fonour< /b> < /a> < /div> < < /.login-logo! – –> div class= > &lt login-box-body; P class= “login-box-msg” > privilege management system < /p> < div asp-validation-summary= “All” class= “text-danger” > < /div> < form asp-controller= “Login” asp-action= “Index” method= “post” > &lt div; class= form-group > &lt input; has-feedback “asp-for=” UserName “type=” text “class=” form-control “placeholder=” username “> &lt span; class=” glyphicon glyphicon-user form-control-feedback “> < /span> < span asp-v Alidation-for= “UserName” class= “text-danger” > < /span> < /div> < div class= “form-group has-feedback &gt”; < input asp-for= “Password” type= “password” class= “form-control” placeholder= “password” > < span c姑娘=“glyphicon glyphicon锁表控制反馈“&gt;&lt;跨&gt;&lt;/ DIV &gt;&lt;div class=“行”& gt;& lt div;class=“col-xs-8“&gt;&lt;div class=”复选框检查& gt“;&lt;标签&gt;&lt;=“记得”type=“复选框”输入ASP &gt;&lt /标签&gt;我记得;&lt;/ D四&gt;&lt;/ DIV &gt;&lt;&lt;/。Col!- & gt;div class= &gt;&lt col-xs-4;按钮式=“提交”class=“按钮按钮按钮按钮主块平&gt;/按钮&gt;&lt;&lt日志;/ DIV &gt;&lt;&lt;/。Col!-!!- & gt;脚本src=“~ / lib /距离/ jquery.js jQuery“&gt;&lt;/脚本&gt;&lt;脚本”src= ~ / lib /引导/距离/ JS / bootstrap.js“&gt;&lt;/脚本&gt;&lt;脚本src=“~ / lib /我/ icheck.js“&gt;&lt;/脚本&gt;&lt;script&gt;$((){ $函数(输入的)。ICheck(’icheckbox_square-blue”radioclass:’iradio_square-blue”{ checkboxclass:,:,increasearea 20 % / /可选});});&lt;/脚本&gt;&lt;/身体&gt;&lt;/ HTML & gt;

关键词的解释

  • “模型loginmodel 模型指定页装订loginmodel。
  • 当表单标签提交时,ASP控制器指定控制器的名称。
  • ASP动作在表单标签提交时指定相应的操作名。
  • asp用于指定与HTML元素的绑定相对应的模型的属性名。
  • 结合ASP验证对应的模型属性的名称,当模型的验证失败,该模型是由错误信息定义。
  • ASP验证=“全部”显示无法验证的所有错误消息。

2.2控制器

修改LoginController,增加用户登录对应的控制器方法。

【HttpPost ]公共iactionresult指数(loginmodel模型){ if(ModelState。有效){ //用户= _userappservice.checkuser VaR来检查用户信息(model.username,模型。密码);如果(用户!= null){ //会话httpcontext.session.set记录(“中”,byteconverthelper.object2bytes(用户));//返回RedirectToAction主页跳转到系统(“指数”、“家(ModelState。addmodelerror);}”,“用户名或密码错误”。)返回视图();}返回视图(模型);}

到此我们基本上就完成了用户登录的逻辑,以及服务器端的登录验证。当输入用户名、密码信息不符合条件时,会给出详细的错误提示。

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

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

2.3验证信息的美化和记忆功能的实现

上面我们只做了服务端验证,而且错误信息的提示并不是很美观,我们可以根据需要修改样式对错误提示信息进行美化。我这里直接使用Layer.js这个前端库。

验证信息的美化

修改用户登录控制器方法,有错误信息时只返回第一条错误信息,客户端自行处理错误信息。

【HttpPost ]公共iactionresult指数(loginmodel模型){ if(ModelState。有效){ //用户= _userappservice.checkuser VaR来检查用户信息(model.username,模型。密码);如果(用户!= null){ //会话httpcontext.session.set记录(“中”,byteconverthelper.object2bytes(用户));//返回RedirectToAction主页跳转到系统(“指数”、“家”viewbag.errorinfo”);} =用户名或密码错误。”;;return View();} viewbag.errorinfo = modelstate.values.first()。错误[ 0 ]。错误信息;返回视图(模型);}

通过Bower程序包管理器添加对Layer的引用,在Login/Index.cshtml中增加对layer.js的引用

脚本;

增加一个隐藏的input标签用于记录错误信息。

&lt;输入ID =“ErrorInfo”type=“隐藏”的值为“@viewbag.errorinfo”/ & gt;

初始化完成后增加对错误信息的处理。

&lt;script&gt;功能){ $(($(输入的)。ICheck(radioclass:,’iradio_square-blue ‘,’icheckbox_square-blue”{ checkboxclass:,increasearea:};// 20 % / /可选)显示错误信息如果服务器验证($(“# ErrorInfo”)(。Val)(层。提示){ $(“# ErrorInfo”)(。Val),# btnlogin”);};});&lt;script&gt /;

此时运行程序,服务器端错误信息的展示样式已经比较美观了。

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

记得我

记住我,主要是记录输入的用户名及密码,通过cookie保存,首先通过Bower前端包管理器增加Jquery.Cookie的引用。在Login/Index.cshtml中增加对jquery.cookie.js的引用。

脚本;

增加form的onsubmit方法

&lt;形成ASP控制器=“登录”ASP行动=“指数”方法=“后”onsubmit =“OnSubmit()“& gt;
&lt;script&gt;功能){ $(($(输入的)。ICheck(radioclass:,’iradio_square-blue ‘,’icheckbox_square-blue”{ checkboxclass:,increasearea:};// 20 % / /可选)显示错误信息如果服务器验证($(“# ErrorInfo”)(。Val)(层。提示){ $(“# ErrorInfo”)(。Val),# btnlogin”);};//判断之前是否有设置cookie,如果有,我记得[ ]设置选择框如果(美元。饼干(“fonour_username”)!= undefined) {$(” RememberMe # “).Attr (” checked “,” checked “);} else {$(” #RememberMe “).RemoveAttr (” checked “);} / / read cookie if ($(” #RememberMe:checked “).Length > 0) {$(“#UserName”).Val ($.cookie (“fonour_userName”), (“#Password”);.Val ($.cookie) (“fonour_password”));}}); / / according to whether the check I remember records or clear cookie function onSubmit (if) {$(“#RememberMe:checked” (.Length &gt) 0); {// set cookie $.cookie (“fonour_userName” $(“#UserName”) (.Val)); $.cookie (“fonour_password” $(“#Password”) (.Val));} else {// clear cookie $.removeCookie (“fonour_userName”); $.removeCookie (“fonour_password”);}}; < /script>

输入用户名密码登陆后,再次回到登录界面,会发现用户名及密码已经填充。

是否有3个用户登录到控制器拦截

一个最基本的控制器拦截,就是当我们直接通过在地址栏输入访问路由地址时,首先应该判断用户是否已经登录,如果没有登录应该实现跳转到登录页面。大致思路是通过重写Controller的OnActionExecuting方法,在OnActionExecuting方法中判断用户是否登录并实现跳转。

3.1个新控制器基类

在Fonour.MVC中右键Controllers文件夹,添加一个名称为FonourControllerBase的控制器基类,内容如下。

抽象类fonourcontrollerbase公共覆盖无效:控制器{ onactionexecuting(actionexecutingcontext filtercontext){字节[](结果;filterContext.HttpContext.Session.TryGetValue CurrentUser,出来的结果);如果(结果= = null){ filtercontext.result =新RedirectResult(“/登录/指数”);返回base.onactionexecuting(filtercontext);} } };

需要进行登陆验证的控制器,修改为从FonourControllerBase继承,这里我们修改HomeController

公开课:FonourControllerBase

启动程序,在未登录情况下,通过地址栏直接访问/Home/Index,会发现已经自动跳转到系统登录界面。

4总结

本次主要介绍了TagHelper的简单实用;Asp.Net Core中的Session中间件的使用;以及系统登录的服务端验证,并对控制器的访问进行了统一的是否登录验证拦截。下一节主要进行功能管理的实现。

文章从互联网整理而来,旨在传播scrum、软件项目管理、研发项目管理、敏捷开发管理工具的知识与应用,帮助软件开发企业真正了解研发项目管理的价值和意义,如果本文侵犯了您的权益或者您需要具体了解更多国内做研发项目管理系统的公司翼发云敏捷项目管理系统的相关信息,欢迎和我们联络:

【网址】www.effapp.com

2018-02-25T01:11:29+08:002018-02-25 01:11:29|Categories: scrum项目管理|