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

原文地址:https://www.cnblogs.com/ZilchWei/p/1810297.html