HTML5技术

mvc5+ef6+Bootstrap 项目心得--身份验证和权限管理 - 丰叔叔

字号+ 作者:H5之家 来源:博客园 2016-07-01 12:00 我要评论( )

最近和朋友完成了一个大单子架构是mvc5+ef6+Bootstrap,用的是vs2015,数据库是sql server2014。朋友做的架构,项目完成后觉得很多值得我学习,在这里总结下一些心得。 创建项目一开始删掉App_Start目录下的IdentityConfig.cs和Startup.Auth.cs文件;清空Modl

最近和朋友完成了一个大单子架构是mvc5+ef6+Bootstrap,用的是vs2015,数据库是sql server2014。朋友做的架构,项目完成后觉得很多值得我学习,在这里总结下一些心得。

创建项目一开始删掉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文件来启动项目)

<appSettings> <add key=value=/> <add key=value=/> <add key=value=/> <add key=value=/> <add key=value=/> <!--去掉创建项目初的Startup.cs文件的设置--> </appSettings>

(不用他们是因为自带的这些内容太冗余)

去掉冗余内容正式开始,首先介绍数据库这一块,数据库我们是配置的可以手动生成和修改的

1.在项目目录想创建Migrations文件夹,里面添加Configuration.cs文件

Configuration : DbMigrationsConfiguration<AccountContext> { public Configuration() { AutomaticMigrationsEnabled = true; ContextKey = ; } Seed(AccountContext context) { //base.Seed(context); } }

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

public class AccountContext:DbContext { ) { } public DbSet<User> Users { get; set; } OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } }

<connectionStrings> <add name=connectionString=providerName=/> </connectionStrings>

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

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

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

public class User { public int ID { get; set; } public string UserName { get; set; } public string Password { get; set; } public Role Role { get; set; } }

//角色枚举 = = 5 }

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

public class Account { [Required] public string Name { get; set; } [Required] public string Password { get; set; } public string RePassword { get; set; } }

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

public class BaseController : Controller { public string UserName => User.Identity.Name; public AccountContext db = new AccountContext(); private User _userInfo = null; public User CurrentUserInfo { get { if (_userInfo == null) { var user = db.Users.SingleOrDefault(u => u.UserName == UserName);//此处为了不每次访问用户表可以做一个静态类,里面存放用户表信息. _userInfo = user == null ? null : new User() { ID = user.ID, UserName = user.UserName, Role = user.Role }; } return _userInfo; } }
    //验证角色:获取Action的CustomAttributes,过滤角色
OnActionExecuting(ActionExecutingContext filterContext) { base.OnActionExecuting(filterContext); var authRoleAtt = filterContext.ActionDescriptor.GetCustomAttributes(false).SingleOrDefault(att => att is AuthorizeRoleAttribute) as AuthorizeRoleAttribute; if (authRoleAtt == null && CurrentUserInfo != null) return; if (!authRoleAtt.Roles.Contains(CurrentUserInfo.Role)) { filterContext.Result = View(, , ); } }
//这里是记log用
OnActionExecuted(ActionExecutedContext filterContext) { base.OnActionExecuted(filterContext); ; ) msg += $; //Log.Debug(msg); } }

AdminController继承BaseController

[Authorize] public ActionResult Index() { return View(db.Users.ToList()); } [Authorize, AuthorizeRole(Role.管理员)] public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } User user = db.Users.Find(id); if (user == null) { return HttpNotFound(); } return View(user); }

 

登录页面:

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    【Vue 入门】使用 Vue2 开发一个展示项目列表的应用 - zhangjk

    2017-04-30 16:00

  • 如何做好项目管理任务分配 - CharlieChu

    如何做好项目管理任务分配 - CharlieChu

    2017-04-27 15:00

  • vue2.0版cnode社区项目搭建及实战开发 - sandisen

    vue2.0版cnode社区项目搭建及实战开发 - sandisen

    2017-04-20 14:00

  • 前端项目从0到1的感悟 - liliangel

    前端项目从0到1的感悟 - liliangel

    2017-04-20 12:00

网友点评
>