Asp.Net MVC4系列---基础篇(4)

Asp.Net Mvc 4系列---基础篇(4)

这一篇总结一下如何在MVC中应用自带的User Management 以及对controller 或action做简单的保护。

新建一个项目

Asp.Net MVC4系列---基础篇(4)

由于生成的EF是5.0,所以用package manager再 安装一下,升级到最新,为了确保project文件引用是一致的版本

Asp.Net MVC4系列---基础篇(4)

安装一下Provider , 在User Management会用到

Asp.Net MVC4系列---基础篇(4)

把以下配置加在web.config 里

  <profiledefaultProvider="DefaultProfileProvider">
     <providers>
       <add name="DefaultProfileProvider"
type="System.Web.Providers.DefaultProfileProvider,System.Web.Providers,
Version=1.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"applicationName="/" />
     </providers>
   </profile>
   <membership defaultProvider="DefaultMembershipProvider">
     <providers>
       <add name="DefaultMembershipProvider"
type="System.Web.Providers.DefaultMembershipProvider,System.Web.Providers,
Version=1.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"enablePasswordRetrieval="false"
enablePasswordReset="true"requiresQuestionAndAnswer="false"
requiresUniqueEmail="false"maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="6"minRequiredNonalphanumericCharacters="0"
passwordAttemptWindow="10"applicationName="/" />
     </providers>
   </membership>
   <roleManager defaultProvider="DefaultRoleProvider"enabled="true">
     <providers>
       <add name="DefaultRoleProvider"
type="System.Web.Providers.DefaultRoleProvider,System.Web.Providers,
Version=1.0.0.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35"
connectionStringName="DefaultConnection"applicationName="/" />
      </providers>
</roleManager>

注意要把RoleManeger节点的enable设为true

开启migration

打开生成的configuration文件

Asp.Net MVC4系列---基础篇(4)

完成以下代码(红色部分为新加):

namespace MvcAuthorization.Migrations
{
   using System;
   using System.Data.Entity;
   using System.Data.Entity.Migrations;
   using System.Linq;
   using System.Web.Security;
 
   internal sealed class Configuration :DbMigrationsConfiguration<MvcAuthorization.Models.UsersContext>
    {
       public Configuration()
       {
            AutomaticMigrationsEnabled = true;
       }
 
       protected override void Seed(MvcAuthorization.Models.UsersContextcontext)
       {
           if(!Roles.RoleExists("Admin"))
               Roles.CreateRole("Admin");
            if(Membership.GetUser("teacher") == null)
               Membership.CreateUser("teacher", "123456");
            if(!Roles.IsUserInRole("Admin","teacher"))
               Roles.AddUserToRole("teacher","Admin");
 
           //  This method will be calledafter migrating to the latest version.
 
           //  You can use theDbSet<T>.AddOrUpdate() helper extension method
           //  to avoid creating duplicateseed data. E.g.
           //
           //    context.People.AddOrUpdate(
           //      p => p.FullName,
           //      new Person { FullName ="Andrew Peters" },
           //      new Person { FullName ="Brice Lambson" },
           //      new Person { FullName ="Rowan Miller" }
           //    );
           //
       }
    }
}


执行Update database,目的:和数据库的表结构同步,并运行刚才写的逻辑。

看到数据库的变化,刚才的逻辑已经生效了。每次同步数据库,Seed函数都会被调用。

Asp.Net MVC4系列---基础篇(4)

Asp.Net MVC4系列---基础篇(4)

下一步,添加一个controller

Asp.Net MVC4系列---基础篇(4)

加上一个attribute,对这个action进行保护(也可以加在controller上,对整个controller做访问限制)

Asp.Net MVC4系列---基础篇(4)

试图在浏览器访问这个action ,发现会重定向到登陆页面


Asp.Net MVC4系列---基础篇(4)

登陆后就可以调用这个controller了 :

你可能感兴趣的:(asp.net)