using System; using System.Data; using System.Data.SqlClient; using Csla; using Csla.Data; namespace ProjectTracker.Library.Admin { /// /// Used to maintain the list of roles /// in the system. /// [Serializable()] public class Roles : BusinessListBase { #region Business Methods /// /// Remove a role based on the role's /// id value. /// /// Id value of the role to remove. public void Remove(int id) { foreach (Role item in this) { if (item.Id == id) { Remove(item); break; } } } /// /// Get a role based on its id value. /// /// Id valud of the role to return 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(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 } }