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

mybwu_com發表於2014-03-11

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

這一篇總結一下如何在MVC中應用自帶的User Management 以及對controller 或action做簡單的保護。

新建一個專案


由於生成的EF是5.0,所以用package manager再 安裝一下,升級到最新,為了確保project檔案引用是一致的版本

安裝一下Provider , 在User Management會用到

把以下配置加在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檔案

完成以下程式碼(紅色部分為新加):

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函式都會被呼叫。


下一步,新增一個controller

加上一個attribute,對這個action進行保護(也可以加在controller上,對整個controller做訪問限制)


試圖在瀏覽器訪問這個action ,發現會重定向到登陸頁面



登陸後就可以呼叫這個controller了 :

相關文章