176 lines
3.8 KiB
C#
176 lines
3.8 KiB
C#
using System;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using Csla;
|
|
using Csla.Data;
|
|
|
|
namespace ProjectTracker.Library.Admin
|
|
{
|
|
/// <summary>
|
|
/// Used to maintain the list of roles
|
|
/// in the system.
|
|
/// </summary>
|
|
[Serializable()]
|
|
public class Roles :
|
|
BusinessListBase<Roles, Role>
|
|
{
|
|
#region Business Methods
|
|
|
|
/// <summary>
|
|
/// Remove a role based on the role's
|
|
/// id value.
|
|
/// </summary>
|
|
/// <param name="id">Id value of the role to remove.</param>
|
|
public void Remove(int id)
|
|
{
|
|
foreach (Role item in this)
|
|
{
|
|
if (item.Id == id)
|
|
{
|
|
Remove(item);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a role based on its id value.
|
|
/// </summary>
|
|
/// <param name="id">Id valud of the role to return</param>
|
|
public Role GetRoleById(int id)
|
|
{
|
|
foreach (Role item in this)
|
|
if (item.Id == id)
|
|
return item;
|
|
return null;
|
|
}
|
|
|
|
protected override object AddNewCore()
|
|
{
|
|
Role item = Role.NewRole();
|
|
Add(item);
|
|
return item;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Authorization Rules
|
|
|
|
public static bool CanAddObject()
|
|
{
|
|
return Csla.ApplicationContext.User.IsInRole("Administrator");
|
|
}
|
|
|
|
public static bool CanGetObject()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public static bool CanDeleteObject()
|
|
{
|
|
return Csla.ApplicationContext.User.IsInRole("Administrator");
|
|
}
|
|
|
|
public static bool CanEditObject()
|
|
{
|
|
return Csla.ApplicationContext.User.IsInRole("Administrator");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Factory Methods
|
|
|
|
public static Roles GetRoles()
|
|
{
|
|
return DataPortal.Fetch<Roles>(new Criteria());
|
|
}
|
|
|
|
private Roles()
|
|
{
|
|
this.AllowNew = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region Data Access
|
|
|
|
[Serializable()]
|
|
private class Criteria
|
|
{ /* no criteria */ }
|
|
|
|
public override Roles Save()
|
|
{
|
|
// see if save is allowed
|
|
if (!CanEditObject())
|
|
throw new System.Security.SecurityException(
|
|
"User not authorized to save roles");
|
|
|
|
// do the save
|
|
Roles result;
|
|
result = base.Save();
|
|
// this runs on the client and invalidates
|
|
// the RoleList cache
|
|
RoleList.InvalidateCache();
|
|
return result;
|
|
}
|
|
|
|
protected override void DataPortal_OnDataPortalInvokeComplete(
|
|
DataPortalEventArgs e)
|
|
{
|
|
if (ApplicationContext.ExecutionLocation ==
|
|
ApplicationContext.ExecutionLocations.Server)
|
|
{
|
|
// this runs on the server and invalidates
|
|
// the RoleList cache
|
|
RoleList.InvalidateCache();
|
|
}
|
|
}
|
|
|
|
private void DataPortal_Fetch(Criteria criteria)
|
|
{
|
|
RaiseListChangedEvents = false;
|
|
using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
|
|
{
|
|
cn.Open();
|
|
using (SqlCommand cm = cn.CreateCommand())
|
|
{
|
|
cm.CommandType = CommandType.StoredProcedure;
|
|
cm.CommandText = "getRoles";
|
|
|
|
using (SafeDataReader dr = new SafeDataReader(cm.ExecuteReader()))
|
|
while (dr.Read())
|
|
this.Add(Role.GetRole(dr));
|
|
}
|
|
}
|
|
RaiseListChangedEvents = true;
|
|
}
|
|
|
|
[Transactional(TransactionalTypes.TransactionScope)]
|
|
protected override void DataPortal_Update()
|
|
{
|
|
this.RaiseListChangedEvents = false;
|
|
using (SqlConnection cn = new SqlConnection(Database.PTrackerConnection))
|
|
{
|
|
cn.Open();
|
|
foreach (Role item in DeletedList)
|
|
{
|
|
item.DeleteSelf(cn);
|
|
}
|
|
DeletedList.Clear();
|
|
|
|
foreach (Role item in this)
|
|
{
|
|
if (item.IsNew)
|
|
item.Insert(cn);
|
|
else
|
|
item.Update(cn);
|
|
}
|
|
}
|
|
this.RaiseListChangedEvents = true;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
}
|