asp.net mvc利用mebership实现权限控制
首先我需要说明开发环境:
本文转自Zilchwei博客
操作系统:windows xp sp3
ide:vs2010中文版(内置asp.net mvc2.0中文版)
数据库:sql server2008(vs2010内置)
我们开始今天的例子:
首先我们file->new一个工程:我将其命名为Mebership_MVC.
然后 我们会在sql server 2008中新建一个数据库.本文转自Zilchwei博客
这里我将其命名为:Text_DB
然后 我们来到这里X:(系统盘)\WINDOWS\Microsoft.NET\Framework\v4.0.30319
找到aspnet_regsql.exe并运行如下图本文转自Zilchwei博客
直接下一步
如图选择下一步
配置连接 选择下一步然后再点一步直至完成.好了 我们看下我们的数据库 里面多了几个表本文转自Zilchwei博客
现在数据库已经完成 我们回到我们新建的项目.这里需要配置项目.打开Web.config修改
<add name="ApplicationServices" connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true"
providerName="System.Data.SqlClient" />
修改后如下本文转自Zilchwei博客
<add name="ApplicationServices"
connectionString="data source=45D31BCE27E74BB\SQLEXPRESS;Initial Catalog=Text_DB;Persist Security Info=True;User ID=sa;Password=luowei1985"
providerName="System.Data.SqlClient" />
AccountController.cs这里已经为我们准备了完整的 登陆,注册,修改密码等方法.
当然 我们还需要个性化一些东西.比如注册的内容 我们可以看到 在model文件夹下面有个AccountModels.cs类这里保存了很多方法 我们只需要修改这些方法就可以实现自己需要的个性化功能.
我这里简单演示下怎么判断用户类型.我们在默认的HomeController下AboutAction上添加
[Authorize(Roles="Admin")]
public ActionResult About()
{
return View();
}
当我们访问这个action的时候会自动跳转到登陆页.本文转自Zilchwei博客
我们注册一个用户admin登陆后依然不能访问我们的about依然提示我们需要登录.这里我们的目的已经达到了 我们需要个性化修改下我们的方法 使得我们可以添加角色为admin的用户
当然 我们现在需要添加一个角色.我们添加一组action
public ActionResult Cr()
{
return View();
}
[HttpPost]
public ActionResult Cr(string rname)
{
MembershipService.CreateR(rname);
return View();
}
这里我们需要自己定义一个CreateR的方法本文转自Zilchwei博客
我们在AccountModels.cs中添加一个接口
public interface IMembershipService
{
int MinPasswordLength { get; }
bool ValidateUser(string userName, string password);
MembershipCreateStatus CreateUser(string userName, string password, string email, string rname);//注意这里多了个参数
bool ChangePassword(string userName, string oldPassword, string newPassword);
void CreateR(string name);//这里是添加的
}
当然还要添加对应方法本文转自Zilchwei博客
public class AccountMembershipService : IMembershipService
{
public void CreateR(string name)
{
Roles.CreateRole(name);
}
后面的代码我就不贴了 大家看这个主要的就可以了.这里
我们还需要改下注册时候的接口和方法
public MembershipCreateStatus CreateUser(string userName, string password, string email,string rname)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("值不能为 null 或为空。", "userName");
if (String.IsNullOrEmpty(password)) throw new ArgumentException("值不能为 null 或为空。", "password");
if (String.IsNullOrEmpty(email)) throw new ArgumentException("值不能为 null 或为空。", "email");
MembershipCreateStatus status;
_provider.CreateUser(userName, password, email, null, null, true, null, out status);
Roles.AddUserToRole(userName, rname);
return status;
}
好了 现在我们开始测试我们的项目.具体请看我给出的项目源代码本文转自Zilchwei博客
https://files.cnblogs.com/ZilchWei/LinqToSqlModel%e9%aa%8c%e8%af%81.rar