Asp.Net MVC4系列---基础篇(4)
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了 :