`
jiasongmao
  • 浏览: 670740 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

实现自定义成员资格用户

阅读更多

提供一个示例,演示如何用自定义成员资格提供程序来扩展 MembershipUser 类。

尽管用户 System.Web.Profile 提供了一种用于将每个用户的信息存储在 Web 应用程序中的方便机制,但应用程序的设计可能还要求将用户身份验证信息及其他用户信息存储在 Membership 数据存储区中。 在这种情况下,将需要生成一个自定义成员资格提供程序,以便在数据存储区中存储和检索用户身份验证信息和其他用户值(有关自定义成员资格提供程序的示例,请参见实现成员资格提供程序)。 此外,还可以扩展 MembershipUser 类,使添加的用户值可用于应用程序代码。

创建自定义成员资格用户包括下列任务:

  • 创建一个继承 MembershipUser 类的类。

  • 创建一个数据源以存储身份验证信息和其他用户设置。

  • 为数据存储区创建一个自定义成员资格提供程序。 该自定义成员资格提供程序将包含其他代码,这些代码可以采用自定义成员资格用户类型的对象作为输入,并且返回自定义成员资格用户类型的对象。

本主题中的示例演示如何修改如何:演示成员资格提供程序实现中的自定义成员资格提供程序示例,以支持自定义成员资格用户实现。

创建自定义成员资格用户

可以创建一个自定义成员资格用户,方法是创建一个继承 MembershipUser 类的类,然后包括公开其他用户值的属性。 此外,还可以向 MembershipUser 类添加方法和事件。

调用 Membership 类以创建自定义 MembershipUser 的实例时,将只调用由 MembershipUser 类定义的构造函数。 如果 MembershipUser 实现包括其他构造函数重载,则这些构造函数只能由为调用自定义构造函数而专门编写的应用程序代码调用。

下面的代码示例演示一个继承 MembershipUser 类的简单自定义成员资格用户,并提供两个其他属性:IsSubscriber 和 CustomerID,前者是布尔属性,标识用户是否为 Web 应用程序订阅服务或新闻稿;后者包含单独客户数据库的唯一标识符。

using System;
using System.Web.Security;

namespace Samples.AspNet.Membership.CS
{
    public class OdbcMembershipUser : MembershipUser
    {
        private bool _IsSubscriber;
        private string _CustomerID;

        public bool IsSubscriber
        {
            get { return _IsSubscriber; }
            set { _IsSubscriber = value; }
        }

        public string CustomerID
        {
            get { return _CustomerID; }
            set { _CustomerID = value; }
        }

        public OdbcMembershipUser(string providername,
                                  string username,
                                  object providerUserKey,
                                  string email,
                                  string passwordQuestion,
                                  string comment,
                                  bool isApproved,
                                  bool isLockedOut,
                                  DateTime creationDate,
                                  DateTime lastLoginDate,
                                  DateTime lastActivityDate,
                                  DateTime lastPasswordChangedDate,
                                  DateTime lastLockedOutDate,
                                  bool isSubscriber,
                                  string customerID) :
                                  base(providername,
                                       username,
                                       providerUserKey,
                                       email,
                                       passwordQuestion,
                                       comment,
                                       isApproved,
                                       isLockedOut,
                                       creationDate,
                                       lastLoginDate,
                                       lastActivityDate,
                                       lastPasswordChangedDate,
                                       lastLockedOutDate)
        {
            this.IsSubscriber = isSubscriber;
            this.CustomerID = customerID;
        }



    }
}

 有关修改 CreateUserWizard 控件以包括成员资格用户的其他用户信息的示例,请参见如何:自定义 ASP.NET CreateUserWizard 控件

为成员资格用户数据创建数据存储区

您将需要为成员资格功能的用户身份验证信息以及自定义成员资格用户的其他用户信息提供一个数据存储区。

下面的代码示例演示一个查询,您可以在 Microsoft Access 数据库中运行该查询,以创建一个要存储自定义成员资格用户的身份验证信息和属性值的表。

CREATE TABLE Users
(
  PKID Guid NOT NULL PRIMARY KEY,
  Username Text (255) NOT NULL,
  ApplicationName Text (255) NOT NULL,
  Email Text (128) NOT NULL,
  Comment Text (255),
  Password Text (128) NOT NULL,
  PasswordQuestion Text (255),
  PasswordAnswer Text (255),
  IsApproved YesNo, 
  LastActivityDate DateTime,
  LastLoginDate DateTime,
  LastPasswordChangedDate DateTime,
  CreationDate DateTime, 
  IsOnLine YesNo,
  IsLockedOut YesNo,
  LastLockedOutDate DateTime,
  FailedPasswordAttemptCount Integer,
  FailedPasswordAttemptWindowStart DateTime,
  FailedPasswordAnswerAttemptCount Integer,
  FailedPasswordAnswerAttemptWindowStart DateTime,
  IsSubscriber YesNo,
  CustomerID Text (64)
)

 创建自定义成员资格提供程序

您将需要创建一个自定义成员资格提供程序,该提供程序支持自定义成员资格用户类型和自定义成员资格数据存储区。 可以编写自定义成员资格提供程序的 GetUser 和 CreateUser 方法,以返回自定义成员资格用户类型的对象。 可以编写自定义成员资格提供程序的 UpdateUser 方法,以采用自定义成员资格用户类型的对象作为输入。

下面几节提供有关创建一个使用自定义成员资格用户类型的自定义成员资格提供程序的指南。 示例以如何:演示成员资格提供程序实现中提供的代码为基础,并使用本主题前面为成员资格用户数据创建数据源部分提供的数据库架构。

修改 GetUser 方法

使用自定义成员资格用户类型时,成员资格提供程序的 MembershipProvider..::..GetUser 和 MembershipProvider..::..GetUser 方法必须仍然返回 MembershipUser 类型的对象。 只要自定义成员资格用户类继承 MembershipUser 类,就会返回自定义成员资格用户类型的对象作为实现 GetUser 方法的返回值。 然后应用程序代码可以强制转换返回的 MembershipUser 作为自定义成员资格用户类型,以访问自定义成员资格用户的其他成员,如下面的代码示例所示。

下面的代码示例演示如何:演示成员资格提供程序实现中示例成员资格提供程序的修改后的 GetUser 方法(及其支持私有方法),这些方法已进行了更新,以便返回本主题前面创建自定义成员资格用户部分中的自定义成员资格用户类型。

//
// MembershipProvider.GetUser(string, bool)
//

public override MembershipUser GetUser(string username, bool userIsOnline)
{
   OdbcConnection conn = new OdbcConnection(connectionString);
   OdbcCommand cmd = new OdbcCommand("SELECT PKID, Username, Email, PasswordQuestion," +
        " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," +
        " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate," +
        " IsSubscriber, CustomerID" +
        " FROM Users  WHERE Username = ? AND ApplicationName = ?", conn);

  cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
  cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

  OdbcMembershipUser u = null;
  OdbcDataReader reader = null;

  try
  {
    conn.Open();

    reader = cmd.ExecuteReader();

    if (reader.HasRows)
    {
      reader.Read();
      u = GetUserFromReader(reader);

      if (userIsOnline)
      {
        OdbcCommand updateCmd = new OdbcCommand("UPDATE Users  " +
                  "SET LastActivityDate = ? " +
                  "WHERE Username = ? AND Applicationname = ?", conn);

        updateCmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = DateTime.Now;
        updateCmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
        updateCmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;

        updateCmd.ExecuteNonQuery();
      }
    }

  }
  catch (OdbcException e)
  {
    if (WriteExceptionsToEventLog)
    {
      WriteToEventLog(e, "GetUser(String, Boolean)");

      throw new ProviderException(exceptionMessage);
    }
    else
    {
      throw e;
    }
  }
  finally
  {
    if (reader != null) { reader.Close(); }

    conn.Close();
  }

  return u;      
}


//
// MembershipProvider.GetUser(object, bool)
//

public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
  OdbcConnection conn = new OdbcConnection(connectionString);
  OdbcCommand cmd = new OdbcCommand("SELECT PKID, Username, Email, PasswordQuestion," +
        " Comment, IsApproved, IsLockedOut, CreationDate, LastLoginDate," +
        " LastActivityDate, LastPasswordChangedDate, LastLockedOutDate," +
        " IsSubscriber" +
        " FROM Users  WHERE PKID = ?", conn);

  cmd.Parameters.Add("@PKID", OdbcType.UniqueIdentifier).Value = providerUserKey;

  OdbcMembershipUser u = null;
  OdbcDataReader reader = null;

  try
  {
    conn.Open();

    reader = cmd.ExecuteReader();

    if (reader.HasRows)
    {
      reader.Read();
      u = GetUserFromReader(reader);

      if (userIsOnline)
      {
        OdbcCommand updateCmd = new OdbcCommand("UPDATE Users  " +
                  "SET LastActivityDate = ? " +
                  "WHERE PKID = ?", conn);

        updateCmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = DateTime.Now;
        updateCmd.Parameters.Add("@PKID", OdbcType.UniqueIdentifier).Value = providerUserKey;

        updateCmd.ExecuteNonQuery();
      }
    }

  }
  catch (OdbcException e)
  {
    if (WriteExceptionsToEventLog)
    {
      WriteToEventLog(e, "GetUser(Object, Boolean)");

      throw new ProviderException(exceptionMessage);
    }
    else
    {
      throw e;
    }
  }
  finally
  {
    if (reader != null) { reader.Close(); }

    conn.Close();
  }

  return u;      
}


//
// GetUserFromReader
//    A helper function that takes the current row from the OdbcDataReader
// and hydrates a MembershipUser from the values. Called by the 
// MembershipUser.GetUser implementation.
//

private OdbcMembershipUser GetUserFromReader(OdbcDataReader reader)
{
  object providerUserKey = reader.GetValue(0);
  string username = reader.GetString(1);
  string email = reader.GetString(2);

  string passwordQuestion = "";
  if (reader.GetValue(3) != DBNull.Value)
    passwordQuestion = reader.GetString(3);

  string comment = "";
  if (reader.GetValue(4) != DBNull.Value)
    comment = reader.GetString(4);

  bool isApproved = reader.GetBoolean(5);
  bool isLockedOut = reader.GetBoolean(6);
  DateTime creationDate = reader.GetDateTime(7);

  DateTime lastLoginDate = new DateTime();
  if (reader.GetValue(8) != DBNull.Value)
    lastLoginDate = reader.GetDateTime(8);

  DateTime lastActivityDate = reader.GetDateTime(9);
  DateTime lastPasswordChangedDate = reader.GetDateTime(10);

  DateTime lastLockedOutDate = new DateTime();
  if (reader.GetValue(11) != DBNull.Value)
    lastLockedOutDate = reader.GetDateTime(11);

  bool isSubscriber = false;
  if (reader.GetValue(12) != DBNull.Value)
    isSubscriber = reader.GetBoolean(12);

  string customerID = String.Empty;
  if (reader.GetValue(13) != DBNull.Value)
    customerID = reader.GetString(13);        

  OdbcMembershipUser u = new OdbcMembershipUser(this.Name,
                                        username,
                                        providerUserKey,
                                        email,
                                        passwordQuestion,
                                        comment,
                                        isApproved,
                                        isLockedOut,
                                        creationDate,
                                        lastLoginDate,
                                        lastActivityDate,
                                        lastPasswordChangedDate,
                                        lastLockedOutDate,
                                        isSubscriber,
                                        customerID);

  return u;
}
 

修改 UpdateUser 方法

使用自定义成员资格用户类型和自定义成员资格提供程序时,实现一种 UpdateUser 方法,该方法采用 MembershipUser 类型的对象作为输入。 在 UpdateUser 方法的实现中,将提供的MembershipUser 对象强制转换为自定义成员资格用户类型,以访问其他属性的值并在数据存储区中进行更新。

下面的代码示例演示如何:演示成员资格提供程序实现中示例成员资格提供程序的修改后的 UpdateUser 方法,该方法已进行了更新,以便将提供的用户强制转换为本主题前面创建自定义成员资格用户部分中的自定义成员资格用户类型。

public override void UpdateUser(MembershipUser user)
{
  OdbcConnection conn = new OdbcConnection(connectionString);
  OdbcCommand cmd = new OdbcCommand("UPDATE Users " +
          " SET Email = ?, Comment = ?," +
          " IsApproved = ?, IsSubscriber = ?, CustomerID = ?" +
          " WHERE Username = ? AND ApplicationName = ?", conn);

  OdbcMembershipUser u = (OdbcMembershipUser)user;

  cmd.Parameters.Add("@Email", OdbcType.VarChar, 128).Value = user.Email;
  cmd.Parameters.Add("@Comment", OdbcType.VarChar, 255).Value = user.Comment;
  cmd.Parameters.Add("@IsApproved", OdbcType.Bit).Value = user.IsApproved;
  cmd.Parameters.Add("@IsSubscriber", OdbcType.Bit).Value = u.IsSubscriber;
  cmd.Parameters.Add("@CustomerID", OdbcType.VarChar, 128).Value = u.CustomerID;
  cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = user.UserName;
  cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;


  try
  {
    conn.Open();

    cmd.ExecuteNonQuery();
  }
  catch (OdbcException e)
  {
    if (WriteExceptionsToEventLog)
    {
      WriteToEventLog(e, "UpdateUser");

      throw new ProviderException(exceptionMessage);
    }
    else
    {
      throw e;
    }
  }
  finally
  {
    conn.Close();
  }
}
 

修改 CreateUser 方法

使用自定义成员资格用户类型和自定义成员资格提供程序时,该自定义成员资格提供程序必须实现 CreateUser 方法,该方法仅采用 MembershipUser 类支持的属性作为输入。 可以创建采用其他属性值的 CreateUser 方法的重载,如下面的代码示例所示。

但是,Membership 类或依赖 Membership 类的控件(如 CreateUserWizard 控件)不会调用此重载。 若要从应用程序调用此方法,请将 Membership 类引用的 MembershipProvider 实例强制转换为自定义成员资格提供程序类型,然后直接调用 CreateUser 重载。

如果您的应用程序使用 CreateUserWizard 控件向成员资格数据源中添加新用户,则可以自定义 CreateUserWizard 控件的向导步骤,以包括检索自定义成员资格用户的其他属性值的控件。 然后可以处理 CreateUserWizard 控件的 CreatedUser 事件并添加执行下列操作的事件代码:

  • 检索其他成员资格用户的属性值。

  • 将 CreateUserWizard 控件创建的成员资格用户强制转换为自定义成员资格用户类型。

  • 设置成员资格用户的其他属性。

  • 将更新的用户传递给 Membership 类的 UpdateUser 方法。 这将调用自定义提供程序的 UpdateUser 方法(该方法在本主题前面的修改 UpdateUser 方法部分中进行了介绍),以便向数据源中添加其他属性值。

说明 说明

有关修改 CreateUserWizard 步骤的示例,请参见如何:自定义 ASP.NET CreateUserWizard 控件

下面的代码示例演示如何:演示成员资格提供程序实现中示例成员资格提供程序的修改后的 CreateUser 方法,该方法已进行了更新,以便返回本主题前面创建自定义成员资格用户部分中的自定义成员资格用户类型。 已创建了重载,以便采用自定义成员资格提供程序的其他属性的值作为输入。

public override MembershipUser CreateUser(string username,
           string password,
           string email,
           string passwordQuestion,
           string passwordAnswer,
           bool isApproved,
           object providerUserKey,
           out MembershipCreateStatus status)
{
  return this.CreateUser(username, password, email,
                        passwordQuestion, passwordAnswer,
                        isApproved, providerUserKey, false, "",
                        out status);
}


//
// OdbcMembershipProvider.CreateUser -- returns OdbcMembershipUser
//

public OdbcMembershipUser CreateUser(
         string username,
         string password,
         string email,
         string passwordQuestion,
         string passwordAnswer,
         bool isApproved,
         object providerUserKey,
         bool isSubscriber,
         string customerID,
         out MembershipCreateStatus status)
{
  ValidatePasswordEventArgs args = 
    new ValidatePasswordEventArgs(username, password, true);

  OnValidatingPassword(args);

  if (args.Cancel)
  {
    status = MembershipCreateStatus.InvalidPassword;
    return null;
  }

  if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
  {
    status = MembershipCreateStatus.DuplicateEmail;
    return null;
  }

  MembershipUser u = GetUser(username, false);

  if (u == null)
  {
    DateTime createDate = DateTime.Now;

    if (providerUserKey == null)
    {
      providerUserKey = Guid.NewGuid();
    }
    else
    {
      if ( !(providerUserKey is Guid) )
      {
        status = MembershipCreateStatus.InvalidProviderUserKey;
        return null;
      }
    }

    OdbcConnection conn = new OdbcConnection(connectionString);
    OdbcCommand cmd = new OdbcCommand("INSERT INTO Users " +
          " (PKID, Username, Password, Email, PasswordQuestion, " +
          " PasswordAnswer, IsApproved," +
          " Comment, CreationDate, LastPasswordChangedDate, LastActivityDate," +
          " ApplicationName, IsLockedOut, LastLockedOutDate," +
          " FailedPasswordAttemptCount, FailedPasswordAttemptWindowStart, " +
          " FailedPasswordAnswerAttemptCount, FailedPasswordAnswerAttemptWindowStart, " +
          " IsSubscriber, CustomerID)" +
          " Values(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", conn);

    cmd.Parameters.Add("@PKID", OdbcType.UniqueIdentifier).Value = providerUserKey;
    cmd.Parameters.Add("@Username", OdbcType.VarChar, 255).Value = username;
    cmd.Parameters.Add("@Password", OdbcType.VarChar, 255).Value = EncodePassword(password);
    cmd.Parameters.Add("@Email", OdbcType.VarChar, 128).Value = email;
    cmd.Parameters.Add("@PasswordQuestion", OdbcType.VarChar, 255).Value = passwordQuestion;
    cmd.Parameters.Add("@PasswordAnswer", OdbcType.VarChar, 255).Value = EncodePassword(passwordAnswer);
    cmd.Parameters.Add("@IsApproved", OdbcType.Bit).Value = isApproved;
    cmd.Parameters.Add("@Comment", OdbcType.VarChar, 255).Value = "";
    cmd.Parameters.Add("@CreationDate", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@LastPasswordChangedDate", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@LastActivityDate", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@ApplicationName", OdbcType.VarChar, 255).Value = pApplicationName;
    cmd.Parameters.Add("@IsLockedOut", OdbcType.Bit).Value = false;
    cmd.Parameters.Add("@LastLockedOutDate", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@FailedPasswordAttemptCount", OdbcType.Int).Value = 0;
    cmd.Parameters.Add("@FailedPasswordAttemptWindowStart", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@FailedPasswordAnswerAttemptCount", OdbcType.Int).Value = 0;
    cmd.Parameters.Add("@FailedPasswordAnswerAttemptWindowStart", OdbcType.DateTime).Value = createDate;
    cmd.Parameters.Add("@IsSubscriber", OdbcType.Bit).Value = isSubscriber;
    cmd.Parameters.Add("@CustomerID", OdbcType.VarChar, 128).Value = customerID;

    try
    {
      conn.Open();

      int recAdded = cmd.ExecuteNonQuery();

      if (recAdded > 0)
      {
        status = MembershipCreateStatus.Success;
      }
      else
      {
        status = MembershipCreateStatus.UserRejected;
      }
    }
    catch (OdbcException e)
    {
      if (WriteExceptionsToEventLog)
      {
        WriteToEventLog(e, "CreateUser");
      }

      status = MembershipCreateStatus.ProviderError;
    }
    finally
    {
      conn.Close();
    }


    return (OdbcMembershipUser)GetUser(username, false);      
  }        
  else
  {
    status = MembershipCreateStatus.DuplicateUserName;
  }


  return null;
}
 

 

分享到:
评论

相关推荐

    ADO.NET实体框架的自定义成员资格提供程序

    4. **实现`MembershipProvider`接口**:为了创建自定义成员资格提供程序,你需要创建一个类并实现`System.Web.Security.MembershipProvider`接口。这个接口定义了一系列方法,如`CreateUser`、`ValidateUser`、`...

    asp.net_成员资格与角色管理

    4. **自定义成员资格与角色管理** - ASP.NET的成员资格和角色框架是可扩展的,允许开发者根据项目需求定制身份验证和授权流程。例如,可以创建自定义的成员资格提供程序,以对接不同的用户存储系统(如数据库、LDAP...

    .net 2.0成员资格管理示例

    它提供了一组预定义的接口和类,如`MembershipProvider`和`MembershipUser`,使得开发者可以通过自定义或使用内置的SQL Server成员资格提供者(如SqlMembershipProvider)来管理用户账户。例如,你可以用`CreateUser...

    asp.net最实用的成员资格

    开发者可以使用预定义的接口和类,如`Membership`、`MembershipUser`、`MembershipProvider`等,来实现自定义的用户验证和管理逻辑。成员资格框架支持多种身份验证模式,如Forms Authentication,它允许用户通过...

    成员资格和角色管理 aspnetdb数据库的移植

    可通过编程方式实现自定义登录验证逻辑。 2. LoginName控件:在用户登录后显示用户名,FormatString属性可以定制显示格式,如添加欢迎语。 3. LoginView控件:根据用户是否登录或角色权限显示不同的内容,实现了动态...

    sharepoint 2010 自定义表单登陆

    下面将详细解释SharePoint 2010中如何实现自定义表单登录: 1. **配置FBA**: - 首先,你需要安装和配置一个支持FBA的成员资格提供程序,例如ASP.NET SQL Membership Provider。 - 在SQL Server中创建一个新的...

    2.0用户权限与管理源代码

    例如,可以创建自定义身份验证提供者、成员资格提供者或角色提供者。MemberShipDemo可能包含了这些自定义组件的实现。 通过学习和理解这个MemberShipDemo源代码,开发者能够掌握如何在.NET 2.0环境中有效地管理和...

    githubUserManager:维护来自Google Workspace成员资格的github用户

    使用Google Workspace用户帐户管理github组织成员资格 根据Google Workspace个人资料中的自定义属性管理GitHub组织中的人员,从而实现无缝的JML(Joiner mover离开者)流程,如果允许,则在Google Workspace中删除/...

    C# 自定义权限角色管理代码

    在.NET中,通常使用ASP.NET的成员资格(Membership)和角色(Role)提供者来处理用户认证和授权。然而,Membership框架虽然功能强大,但配置和使用相对复杂,可能不适合所有场景,尤其是对于小型项目或者需要高度...

    .Net高级程序设计-Login控件

    通过Login控件和相关的成员资格提供程序,可以实现对用户登录状态的管理,以及根据不同用户角色显示不同内容的LoginView控件等。 知识点七:***表单身份验证 ***提供了表单身份验证机制,可以与成员资格系统结合...

    asp.net 实现用户的域验证

    在验证用户时,我们通常会使用`System.Web.Security.Membership`类,它可以与ASP.NET的成员资格提供程序配合工作,如SqlMembershipProvider或ActiveDirectoryMembershipProvider。对于域验证,我们会选择后者,因为...

    .net个性化用户配置技术

    ASP.NET的成员资格系统允许用户注册并验证身份,同时提供了管理用户账户和权限的工具。角色管理则让开发者可以将用户分组到不同的角色,从而根据角色分配不同的访问权限和个性化设置。例如,管理员可能看到更多管理...

    易语言内存自定义数据类型源码

    易语言是一种基于中文编程的程序设计语言,旨在降低编程难度,让不懂英文的用户也能进行软件开发。在易语言中,内存自定义数据类型是一种重要的编程概念,它允许程序员根据需求定义自己的数据结构,以便更有效地管理...

    asp.net RBAC通用权限管理

    综上所述,ASP.NET RBAC通用权限管理通过成员资格和角色框架,实现了用户、角色和权限的有效管理。通过RMF1.0 Beta 20061003这样的工具,开发者可以快速构建具备安全控制的Web应用,同时确保系统的可扩展性和可维护...

    权限控制例子,VB.NET实现

    为了实现这样的权限控制系统,开发者可能会使用ASP.NET的内置角色和成员资格框架,配合自定义的业务逻辑和数据库操作。第三方控件可能提供了更友好的界面和更丰富的功能,如用户和角色的批量操作,权限的图形化配置...

    ASP.NET 2.0快速入门(6):ASP.NET 2.0 成员管理

    1. **成员资格提供程序**:ASP.NET 2.0引入了一种灵活的方式来管理用户账户,即成员资格提供程序(Membership Provider)。这个系统允许开发者选择不同的存储机制,如SQL Server、Access或Active Directory,来存储...

    网站中的权限管理的实现

    在开发层面,Visual Studio 2008(VS2008)提供了ASP.NET框架,其中的成员资格(Membership)、角色(Roles)和授权(Authorization)功能为权限管理提供了强大的支持。我们可以利用` Membership`类进行用户注册、...

    C#用户权限 不同的用户登录进来有不同的权限!

    7. **数据库存储**:用户和角色信息通常存储在数据库中,如ASP.NET的成员资格提供程序或ASP.NET Core Identity。这些框架提供了对用户数据的CRUD操作,并且可以与角色系统集成,以实现动态权限管理。 8. **安全配置...

    asp.net的登陆控件

    默认的SQLServer成员资格提供程序存储用户数据在数据库中,但也可以根据需求配置其他类型的提供程序,如Active Directory或自定义实现。 在ASP.NET中,登录控件(Login)包括以下关键元素: 1. **用户名/密码...

Global site tag (gtag.js) - Google Analytics