以前一直在用MVC3,前段使用学习了MVC4,在做一个小示例的时候,想给注册的用户分配角色,从而实现操作访问权限,自己还是按照MVC3中的做法,可是后来发现已经不行了,甚至创建的数据库都完全不一样,查一下资料才发现原来在MVC4中微软提供了一个新的机制--SimpleMembership!本文就来简单叙述一下如何使用它!
第一步、创建一个MVC4的Internet项目;
第二步、配置Web.Config文件:
1、在<system.web>节点中配置以下节点:
<membership defaultProvider="MyMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider"
connectionStringName="DefaultConnection"
applicationName="/"
type="WebMatrix.WebData.SimpleMembershipProvider,WebMatrix.WebData"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider">
<providers>
<clear/>
<add name="MyRoleProvider"
connectionStringName="DefaultConnection"
type="WebMatrix.WebData.SimpleRoleProvider,WebMatrix.WebData"/>
</providers>
</roleManager>
2、根据自己的需要,配置连接字符串
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=aspnet-SimpleMembership;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-SimpleMembership.mdf"
providerName="System.Data.SqlClient" />
</connectionStrings>
3、注意以下的配置,不要更改,直接使用默认值:
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
第三步、运行程序
调试运行程序,点击注册链接,然后进入数据库中,没出意外的话,已经自动创建好了数据库以及对应的表,数据库的名字就是你的连接字符串中设置的名字;
第四步:试着使用一下SimpleMembership
在项目的InitializeSimpleMembershipAttribute.cs文件中的SimpleMembershipInitializer类的构造函数中,找到如下的语句:
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
在此句后面添加:
<span style="white-space:pre"> </span>SimpleRoleProvider roles = (SimpleRoleProvider)Roles.Provider;
//判断当前是否包含了名为Admin的角色,如果没有则添加
if (!roles.RoleExists("Admin"))
{
roles.CreateRole("Admin");
}
SimpleMembershipProvider memberships = (SimpleMembershipProvider)Membership.Provider;
//判断是否注册了abcd这个用户,如果没有则注册,有则检查角色属性
if (memberships.GetUser("abcd", false) == null)
{
memberships.CreateUserAndAccount("abcd", "abcd123");
}
//获取abcd的角色列表,看看是否包含Admin角色,如果不包含,则添加到Admin角色中,注意这里得引用System.Linq命名空间
if (!roles.GetRolesForUser("abcd").Contains("Admin"))
{
roles.AddUsersToRoles(new[] { "abcd" }, new[] { "Admin" });
}
接着,调试运行程序,试着注册一个用户,注册完成后,浏览数据库的用户表,会有两个用户,一个是你刚刚通过页面注册的,另一个是上面这段代码加进去的,并且名为abcd的用户属于Admin角色!
第五步、最后的测试
有了上面的这些,我们试着在HomeController的About操作上做如下更改:
[Authorize(Roles="Admin")]
public ActionResult About()
{
ViewBag.Message = "只有拥有Admin角色用户才能访问!";
return View();
}
试着用abcd用户登录,然后访问关于链接,能看到一切正常,但是用另外一个用户访问,会被重定向到登陆页面!
那么到这里,最基本的东西就做完了!
这篇文章是新手学习MVC4的笔记,亦或是备忘录,如有不对,欢迎指正,共同进步!