MVC5 + EF6 +引导项目的身份认证和权限管理-研发项目管理

>>MVC5 + EF6 +引导项目的身份认证和权限管理-研发项目管理

MVC5 + EF6 +引导项目的身份认证和权限管理-研发项目管理

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

1.mvc5+ef6+Bootstrap 项目心得–创立之初

2.mvc5+ef6+Bootstrap 项目心得–身份验证和权限管理 scrum

3.mvc5+ef6+Bootstrap 项目心得–WebGrid

最近和朋友完成了一个大单子架构是mvc5+ef6+Bootstrap,用的是vs2015,数据库是sql server2014。朋友做的架构,项目完成后觉得很多值得我学习,在这里总结下一些心得。先说明,以下方法是创建项目时选择MVC,而不是Empty。所以有许多多余的东西,如果选择Empty创建项目,请看目录1 软件项目管理

创建项目一开始删掉App_Start目录下的IdentityConfig.cs和Startup.Auth.cs文件;清空Modle文件夹,Controller文件夹和相应的View; 删除目录下的ApplicationInsights.config文件和Startup.cs文件。(不使用自带的Identity,太多内容不需要)

修改web.config文件(添加<add key=”owin:AutomaticAppStartup” value=”false”/>不使用Startup.cs文件来启动项目) 敏捷开发流程

&lt;appSettings &gt;&lt;添加关键=“网页:版“价值=“到”/ & gt;& lt添加;关键=“网页:启用”值为“假”/ & gt;& lt添加;关键=“clientvalidationenabled”值为“真”/ & gt添加;&lt;关键=“unobtrusivejavascriptenabled”值为“真”/ & gt;& lt添加;关键=“恩:automaticappstartup”值为“假”/ & gt;& lt;!——删除startup.cs文件创建在设定的项目开始——&gt;&lt;/ appSettings & gt;
&lt;模块&gt;&lt;删除名称=“窗口”/ & gt;& lt;/模块&gt;这句话必须删除一些,否则,用户身份将无法工作。

(不用他们是因为自带的这些内容太冗余) 研发项目管理

1。首先,介绍了数据库,我们配置数据库可以手动生成和使用NuGet命令修改。在项目的目录,你想创建一个迁移文件夹,这增加了一个configuration.cs文件

(你也可以使用NuGet命令开启Code First Migrations功能

使迁移- ContextTypeName EFTrain.Models.EFTrainContext(命名空间。文件名))
内部密封类配置:dbmigrationsconfiguration &lt;accountcontext &gt;配置){ { public(automaticmigrationsenabled = true;contextkey =“userproject。德尔。accountcontext”;}保护覆盖空洞的种子(accountcontext上下文){ //基地。种子} }(背景);

在Model文件夹下添加AccountContext.cs文件

公共课accountcontext:DbContext(accountcontext){ public:基地(“accountcontext”){ } {公众用户DbSet &lt;用户&gt;获得;集;覆盖空洞OnModelCreating }保护(DbModelBuilder modelBuilder){ ModelBuilder。公约。删除&lt;pluralizingtablenameconvention &gt;();} }
&lt;connectionStrings &gt;&lt;添加名称=“accountcontext“ConnectionString =“数据源=(LocalDB)/ mssqllocaldb;AttachDBFilename = | DataDirectory | / userproject.mdf;初始目录= userproject;综合安全= true”的ProviderName =”系统。数据。我“&gt;&lt;/ connectionStrings & gt;

然后 使用vs2015里面的工具-NuGet包管理器-程序包管理控制平台

输入add-migration Initial 按回车,在输入update-database按回车。在App_Data文件夹下就会看到AccountContext数据库了。

2。创建测试模型

在Model文件夹下添加User.css文件

公共类用户{公共ID { get;set;}公共字符串用户名{ };};{ } };{ } }
枚举的角色/角色枚举{管理员= 1,= 2 = 3员工,经理,总经理= 4,主席= 5 }

在ViewModel文件夹中添加Account.cs文件

公共类帐户{必需的]公共字符串名称{;get;set;} [必需]公共公共{ };}

三.创建用于测试控制器

这里推荐创建BaseController,之后的Controller就继承它来使用

类方法:控制器串用户名{ public = & gt;user.identity.name公众;accountcontext分贝=新accountcontext(个人用户);_userinfo = null;公共用户currentuserinfo {得到{如果(_userinfo = = null){ var用户= db.users.singleordefault(U = & gt;u.username =用户名);//在这里不能访问用户表可以做一个静态类,里面存储的用户信息表。_userinfo =用户=零?空:新(用户){ ID = User.ID,用户名= user.username,角色=用户角色} } } }。_userinfo;回归;
/验证作用:行动customattributes,保护覆盖空洞onactionexecuting过滤器的作用(actionexecutingcontext filtercontext){ base.onactionexecuting(filtercontext);var authroleatt = filtercontext.actiondescriptor.getcustomattributes(假)。SingleOrDefault(ATT = & gt;ATT是authorizeroleattribute作为authorizeroleattribute);如果(authroleatt = = null &amp;&amp;CurrentUserInfo!= null)返回;如果(!authroleatt.roles.contains(currentuserinfo。角色)){ filtercontext.result =观(“nopermission”、“_layout”,“你没有权限访问此功能!”);} } //
日志保护覆盖在空洞的OnActionExecuted(actionexecutedcontext filtercontext){ base.onactionexecuted(filtercontext);var msg =用户名:{ currentuserinfo?。用户名},{请求URL链接。}”;如果(request.httpmethod =后)味精= $”,数据:{ HttpUtility.UrlDecode((请求。形式。toString))”/ log.debug(MSG);} } };
公共课authorizeroleattribute:属性{上市& lt;作用&gt;角色{有};设置;公共({ { } }){ },{ }}}}}}。

AdminController继承BaseController

[授权]公共ActionResult(指数){ return View(分贝。用户。列出)([授权);},AuthorizeRole(角色。公共的ActionResult细节管理员)](int?ID){ if(ID = = null){ return新httpstatuscoderesult(httpstatuscode。badrequest);}用户= db.users.find(ID);如果(用户= = null){ return(httpnotfound)返回视图(用户);};}

4。创建动作和视图

登录页面:

@model UserProject.ViewModels.Account @{ViewBag.Title = “Login”;} @using (Html.BeginForm (“Login”, “Admin”, FormMethod.Post, new {@class = “form-horizontal”, role = “form”})) {@Html.AntiForgeryToken (&lt); HR /> @Html.ValidationSummary (true, new “,” text-danger “= {@class} < div) class=” form-group “> @Html.LabelFor (m => m.Name, new {@class =” col-md-2 control-label “&lt div class=”}); col-md-10 > @ Html.TextBoxFor (m => m.Name, new {@class} = “form-control” @Html.ValidationMessageFor (m) =&gt m.Name, “new”; {@class}) = “text-danger” < /div> < /div> < div class= “form-group” > @Html.LabelFor (m => m.Password, new {@class = “col-md-2 control-label” &lt div class= “}); col-md-10 > @Html.PasswordFor(M = & gt;M.密码,新{ } =“类”的形式控制”@html.validationmessagefor(M)= & gt M.密码,“新”;{ @类})=“文本的危险”& lt;/ DIV &gt;&lt;/ DIV &gt;&lt;DIV类=“群”& gt;& lt div;类= col-md-offset-2 &gt;&lt输入;col-md-10”type=“submit”value=“class=”按钮按钮主要“登录”/ & gt;& lt;/ DIV &gt;&lt;/ DIV &gt;}

登录的Action:

[ allowanonymous ]公共ActionResult(登录){ return(观点)[ HttpPost allowanonymous ]公共;},ActionResult Login(计算模型){ if(ModelState。有效){ var用户= db.users.singleordefault(T = =模型。名称= & gt;t.username &amp;&amp;T.密码= =模型。密码);如果(用户!= null){ formsauthentication.setauthcookie(model.name,false)cookie中的用户名;//返回RedirectToAction(“指数”);}否则{ ModelState.AddModelError(“名称”、“用户名不存在!”);} } return View(模型);}公ActionResult LogOff(){ formsauthentication.signout();返回RedirectToAction(“登录”);}。

通过以上方式就完成了用户的登录和权限的控制, 访问Details这个Action的时候必须是管理员角色。

如果需要多个角色使用Action可以:[Authorize, AuthorizeRole(Role.管理员,Role.经理)]

用户登录使用该方法保存在cookie :FormsAuthentication.SetAuthCookie(model.name,假);
使用用户的身份直接在控制器和视图获取用户名

这只是一个测试项目,是对已经完成的一些知识点的总结。

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

【网址】www.effapp.com

2018-02-24T15:40:42+08:002018-02-24 15:40:42|Categories: scrum项目管理|