Shamil Salakhetdinov
shamil at users.mns.ru
Thu Oct 25 16:21:53 CDT 2007
Hi Robert,
The below test C# code seems to work well in VS2005 console application with
app.config defining system.web section with membership and role providers
referring MS SQL database defined in connectionStrings section:
//+ user
public class TestRolesAndUsersInConsoleApp
{
public static void Test()
{
try
{
//' Creating a new user
string userName = "user1";
string userName2 = "user2";
string password = "test";
string email = "test at mail.ru";
string passwordQuestion = "Password question";
string passwordQuestionAnswer = "test";
string roleName = "Developers";
System.Web.Security.MembershipUser user = null;
MembershipCreateStatus status;
if (System.Web.Security.Membership.ValidateUser(userName,
password))
{
System.Web.Security.Membership.DeleteUser(userName,
true);
Console.WriteLine("User " + userName + " - deleted.");
}
if (System.Web.Security.Membership.ValidateUser(userName2,
password))
{
System.Web.Security.Membership.DeleteUser(userName2,
true);
Console.WriteLine("User " + userName2 + " - deleted.");
}
if (System.Web.Security.Roles.RoleExists(roleName))
{
System.Web.Security.Roles.DeleteRole(roleName);
Console.WriteLine("Role " + roleName + " - deleted.");
}
user = System.Web.Security.Membership.CreateUser(userName,
password, email, passwordQuestion, passwordQuestionAnswer, true, out
status);
if (status == MembershipCreateStatus.Success)
{
int aa = 1;
}
//' Validate a username/passworduserName
if (System.Web.Security.Membership.ValidateUser(userName,
password))
Console.WriteLine(userName + " - User validated. " +
status.ToString() );
else
Console.WriteLine(userName + " - User invalid! ");
//' Create a new Developer role.
//' Add the <roleManager enabled="true" /> to the app.config
for this to work
if (!System.Web.Security.Roles.RoleExists(roleName)) {
System.Web.Security.Roles.CreateRole(roleName);
}
//' Add a new role to a known user.
if (!System.Web.Security.Roles.IsUserInRole(userName,
roleName))
{
System.Web.Security.Roles.AddUserToRole(userName,
roleName);
}
if (!System.Web.Security.Roles.IsUserInRole(userName,
roleName))
{
Console.WriteLine(userName + " added to role " +
roleName);
System.Web.Security.Roles.AddUserToRole(userName,
roleName);
}
//' Create a second user with only username/password
//' Add the <membership><providers> element to the
app.config first
user = System.Web.Security.Membership.GetUser(userName2);
if (user == null) {
user =
System.Web.Security.Membership.CreateUser(userName2, password);
System.Web.Security.Roles.AddUserToRole(userName2,
roleName);
Console.WriteLine("Created user: " + user.UserName);
}
//' Set the current application principal information to a
known user
System.Security.Principal.GenericIdentity identity;
RolePrincipal principal;
user = System.Web.Security.Membership.GetUser(userName);
identity = new
System.Security.Principal.GenericIdentity(user.UserName);
principal = new System.Web.Security.RolePrincipal(identity);
System.Threading.Thread.CurrentPrincipal = principal;
//' Check if the current principal is in a specific role
Console.Write(System.Threading.Thread.CurrentPrincipal.Identity.Name);
if (System.Web.Security.Roles.IsUserInRole(roleName))
Console.WriteLine(" Is a developer.");
else
Console.WriteLine(" Doesn't write code.");
//' Set the current application principal information to
another known user
user = System.Web.Security.Membership.GetUser(userName2);
identity = new GenericIdentity(user.UserName);
principal = new RolePrincipal(identity);
System.Threading.Thread.CurrentPrincipal = principal;
//' Use the principal to check for role information
Console.Write(System.Threading.Thread.CurrentPrincipal.Identity.Name);
if
(System.Threading.Thread.CurrentPrincipal.IsInRole(roleName))
Console.WriteLine(" is a developer.");
else
Console.WriteLine(" doesn't write code.");
//+ delete
if (System.Web.Security.Membership.ValidateUser(userName,
password))
{
System.Web.Security.Membership.DeleteUser(userName,
true);
Console.WriteLine("User " + userName + " - deleted.");
}
if (System.Web.Security.Membership.ValidateUser(userName2,
password))
{
System.Web.Security.Membership.DeleteUser(userName2,
true);
Console.WriteLine("User " + userName2 + " - deleted.");
}
if (System.Web.Security.Roles.RoleExists(roleName))
{
System.Web.Security.Roles.DeleteRole(roleName);
Console.WriteLine("Role " + roleName + " - deleted.");
}
//- delete
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
//- user
--
Shamil
P.S. app.config for console app's test class above looks like that (watch
line wraps):
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<remove name="DatabaseServer" />
<add name="DatabaseServer" ... blah blah blah ... />
</connectionStrings>
<system.web>
<roleManager enabled="true" cacheRolesInCookie="false"
cookieName="TEST_ROLES" defaultProvider="TEST_APP_RoleProvider">
<providers>
<remove name = "AspNetSqlMembershipProvider1"/>
<add connectionStringName="DatabaseServer"
applicationName="/TEST_APP_Web" name="TEST_APP_RoleProvider"
type="System.Web.Security.SqlRoleProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
<membership defaultProvider="TEST_APP_MembershipProvider"
userIsOnlineTimeWindow="15">
<providers>
<remove name = "AspNetSqlMembershipProvider"/>
<add name="TEST_APP_MembershipProvider"
connectionStringName="DatabaseServer" applicationName="/TEST_APP_Web"
enablePasswordRetrieval="true" enablePasswordReset="true"
requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
passwordFormat="Encrypted" maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10" minRequiredPasswordLength="2"
minRequiredNonalphanumericCharacters="0"
type="System.Web.Security.SqlMembershipProvider, System.Web,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
/>
</providers>
</membership>
<machineKey ... blah blah blah... validation='SHA1'/>
</system.web>
</configuration>
-----Original Message-----
From: dba-vb-bounces at databaseadvisors.com
[mailto:dba-vb-bounces at databaseadvisors.com] On Behalf Of Robert L. Stewart
Sent: Friday, October 26, 2007 12:54 AM
To: dba-vb at databaseadvisors.com
Subject: Re: [dba-VB] Using the ASP.NET 2.0 membership, roles etc.
The roles/membership stuff is currently available only in ASP.net pages.
But, in VS 2008, it will also be available in WinForm/Smart Client
applications.
Robert
<<< tail skipped >>>