129 lines
2.7 KiB
C#
129 lines
2.7 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Collections.Generic;
|
|
using System.Security.Principal;
|
|
using Csla;
|
|
|
|
namespace ProjectTracker.Library.Security
|
|
{
|
|
[Serializable()]
|
|
public class PTIdentity :
|
|
ReadOnlyBase<PTIdentity>, IIdentity
|
|
{
|
|
#region Business Methods
|
|
|
|
private bool _isAuthenticated;
|
|
private string _name = string.Empty;
|
|
private List<string> _roles = new List<string>();
|
|
|
|
public string AuthenticationType
|
|
{
|
|
get { return "Csla"; }
|
|
}
|
|
|
|
public bool IsAuthenticated
|
|
{
|
|
get { return _isAuthenticated; }
|
|
}
|
|
|
|
public string Name
|
|
{
|
|
get { return _name; }
|
|
}
|
|
|
|
protected override object GetIdValue()
|
|
{
|
|
return _name;
|
|
}
|
|
|
|
internal bool IsInRole(string role)
|
|
{
|
|
return _roles.Contains(role);
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Factory Methods
|
|
|
|
internal static PTIdentity UnauthenticatedIdentity()
|
|
{
|
|
return new PTIdentity();
|
|
}
|
|
|
|
internal static PTIdentity GetIdentity(
|
|
string username, string password)
|
|
{
|
|
return DataPortal.Fetch<PTIdentity>
|
|
(new Criteria(username, password));
|
|
}
|
|
|
|
private PTIdentity()
|
|
{ /* require use of factory methods */ }
|
|
|
|
#endregion
|
|
|
|
#region Data Access
|
|
|
|
[Serializable()]
|
|
private class Criteria
|
|
{
|
|
private string _username;
|
|
public string Username
|
|
{
|
|
get { return _username; }
|
|
}
|
|
|
|
private string _password;
|
|
public string Password
|
|
{
|
|
get { return _password; }
|
|
}
|
|
|
|
public Criteria(string username, string password)
|
|
{
|
|
_username = username;
|
|
_password = password;
|
|
}
|
|
}
|
|
|
|
private void DataPortal_Fetch(Criteria criteria)
|
|
{
|
|
using (SqlConnection cn =
|
|
new SqlConnection(Database.SecurityConnection))
|
|
{
|
|
cn.Open();
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandText = "Login";
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.Parameters.AddWithValue("@user", criteria.Username);
|
|
cm.Parameters.AddWithValue("@pw", criteria.Password);
|
|
using (SqlDataReader dr = cm.ExecuteReader())
|
|
{
|
|
if (dr.Read())
|
|
{
|
|
_name = criteria.Username;
|
|
_isAuthenticated = true;
|
|
if (dr.NextResult())
|
|
{
|
|
while (dr.Read())
|
|
{
|
|
_roles.Add(dr.GetString(0));
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
_name = string.Empty;
|
|
_isAuthenticated = false;
|
|
_roles.Clear();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|