protected void rtlUserPermissionsForEditing_UpdateCommand(Object source, TreeListCommandEventArgs e)
        {
            SessionObject sessionObject = (SessionObject)Session["SessionObject"];
            _user = sessionObject.SelectedUser;
            if (_user == null) return;

            var editedItem = e.Item as TreeListDataItem;
            if (editedItem == null) return;

            //Get the new values:
            var newValues = new Hashtable();
            e.Item.OwnerTreeList.ExtractValuesFromItem(newValues, editedItem, true);
            Guid permissionID = new Guid();
            Guid.TryParse(newValues["PermissionId"].ToString(), out permissionID);
            if (permissionID == default(Guid)) return;

            string permissionName = newValues["PermissionName"] == null ? string.Empty : newValues["PermissionName"].ToString();
            int permissionLevel = newValues["PermissionLevelValue"] == null ? 0 : DataIntegrity.ConvertToInt(newValues["PermissionLevelValue"].ToString());
            bool hasPermission = newValues["HasPermission"] != null && DataIntegrity.ConvertToBool(newValues["HasPermission"]);

            ThinkgatePermission permission = new ThinkgatePermission(permissionID);

            if (hasPermission)
            {
                permission.PermissionLevel = (ThinkgatePermission.PermissionLevelValues)Enum.ToObject(typeof(ThinkgatePermission.PermissionLevelValues), permissionLevel);
                _user.addPermission(permission);
                lblResultMessage.Text = string.Format("Permission {0} was added to user {1}.", permissionName, _user.UserName);
                foreach (TreeListDataItem item in editedItem.ChildItems)
                {
                    Guid.TryParse(item.GetDataKeyValue("PermissionId").ToString(), out permissionID);
                    if (permissionID == default(Guid)) return;
                    permission = new ThinkgatePermission(permissionID);
                    permission.PermissionLevel = (ThinkgatePermission.PermissionLevelValues)Enum.ToObject(typeof(ThinkgatePermission.PermissionLevelValues), permissionLevel);

                    _user.addPermission(permission);
                }
            }
            else
            {
                _user.removePermission(permission);
                lblResultMessage.Text = string.Format("Permission {0} was revoked from user {1}.", permissionName, _user.UserName);
                foreach (TreeListDataItem item in editedItem.ChildItems)
                {
                    Guid.TryParse(item.GetDataKeyValue("PermissionId").ToString(), out permissionID);
                    if (permissionID == default(Guid)) return;
                    permission = new ThinkgatePermission(permissionID);

                    _user.removePermission(permission);
                }
            }
            sessionObject.UpdateUserObject(_user);
        }
        protected void rtlRolePermissionsForEditing_UpdateCommand(Object source, TreeListCommandEventArgs e)
        {
            var editedItem = e.Item as TreeListDataItem;
            if (editedItem == null) return;

            Guid newRoleID = new Guid();
            Guid.TryParse(lblHeaderItemID.Text, out newRoleID);
            if (newRoleID == default(Guid)) return;

            ThinkgateRole role = new ThinkgateRole(newRoleID);
            if (String.IsNullOrEmpty(role.RoleName)) return;

            //Get the new values:
            var newValues = new Hashtable();
            e.Item.OwnerTreeList.ExtractValuesFromItem(newValues, editedItem, true);
            Guid permissionID = new Guid();
            Guid.TryParse(newValues["ID"].ToString(), out permissionID);
            if (permissionID == default(Guid)) return;

            string permissionName = newValues["Name"] == null ? string.Empty : newValues["Name"].ToString();
            int permissionLevel = newValues["PermissionLevelValue"] == null ? 0 : DataIntegrity.ConvertToInt(newValues["PermissionLevelValue"].ToString());
            bool hasPermission = newValues["Member"] != null && DataIntegrity.ConvertToBool(newValues["Member"]);

            ThinkgatePermission permission = new ThinkgatePermission(permissionID);
            SessionObject sessionObject = (SessionObject)Session["SessionObject"];
            ThinkgateUser user = sessionObject.LoggedInUser;
                
            if (hasPermission)
            {
                permission.PermissionLevel = (ThinkgatePermission.PermissionLevelValues)Enum.ToObject(typeof(ThinkgatePermission.PermissionLevelValues), permissionLevel);
                
                //pricingModule.Permissions.Add(permission);        // Not sure what point of this was
                role.UpdateRolePermissions(permissionID, permissionLevel, user.UserName);
                lblResultMessage.Text = string.Format("Permission {0} was added to Role {1}.", permissionName, role.RoleName);

                // WSH: Going to loop through the children and deal with them. In theory, you could devise a strategy that involved fewer calls to the DB and did a mass update. However you have to do a uniqueness check on each child insert or do a complete delete of all children recs to then do a mass insert. Since this will be a vary rare update, I decided performance was not important.
                foreach (TreeListDataItem item in editedItem.ChildItems)
                {
                    permissionID = new Guid();
                    Guid.TryParse(item.GetDataKeyValue("ID").ToString(), out permissionID);
                    if (permissionID == default(Guid)) return;

                    role.UpdateRolePermissions(permissionID, permissionLevel, user.UserName);
                }
            }
            else
            {
                //pricingModule.Permissions.Remove(permission);   // WSH : Not sure what point of this was
                role.DeleteRolePermissions(permissionID);
                lblResultMessage.Text = string.Format("Permission {0} was revoked from Role {1}.", permissionName, role.RoleName);

                // WSH: Going to loop through the children and deal with them. In theory, you could devise a strategy that involved fewer calls to the DB and did a mass update. However you have to do a uniqueness check on each child insert or do a complete delete of all children recs to then do a mass insert. Since this will be a vary rare update, I decided performance was not important.
                foreach (TreeListDataItem item in editedItem.ChildItems)
                {
                    permissionID = new Guid();
                    Guid.TryParse(item.GetDataKeyValue("ID").ToString(), out permissionID);
                    if (permissionID == default(Guid)) return;

                    role.DeleteRolePermissions(permissionID);
                }
            }

        }
        protected void rgPermissions_UpdateCommand(Object source, GridCommandEventArgs e)
        {
            var editedItem = e.Item as GridEditableItem;

            if (editedItem == null) return;

            //Get the new values:
            var newValues = new Hashtable();
            e.Item.OwnerTableView.ExtractValuesFromItem(newValues, editedItem);
            Guid permissionID = new Guid();
            Guid.TryParse(editedItem.GetDataKeyValue("PermissionID").ToString(), out permissionID);
            string permissionName = newValues["PermissionName"] == null ? string.Empty : newValues["PermissionName"].ToString();
            string description = newValues["Description"] == null ? string.Empty : newValues["Description"].ToString();

            if (String.IsNullOrEmpty(permissionName)) return;

            ThinkgatePermission perm = new ThinkgatePermission(permissionID, permissionName, description);
            perm.UpdatePermission();
            LoadPermissions();

        }