private void radio_Checked(object sender, RoutedEventArgs e) { if (_openingDialog) { return; } // Check which radio button was pressed bool?state = (sender as RadioButton).Name == "radioAllow" ? (bool?)true : (sender as RadioButton).Name == "radioDeny" ? (bool?)false : (bool?)null; // Retrieve the data of the permission being set ListBoxItem lbItem = VisualTree.GetParent <ListBoxItem>(sender as RadioButton); ApiMenuItem x = (ApiMenuItem)lbItem.Content; string permissionValue = x.Path; if (permissionValue == null) { return; } // Retrieve relevant parameters object[] parameters = PermissionTarget_dialog.Content as object[]; Oltp.UserRow user = parameters[0] as Oltp.UserRow; Oltp.UserGroupRow group = parameters[0] as Oltp.UserGroupRow; Oltp.AccountPermissionDataTable permissionsTable = parameters[1] as Oltp.AccountPermissionDataTable; // Get the row with the last value for this permissions Oltp.AccountPermissionRow perm = permissionsTable.FindByAccountIDTargetIDTargetIsGroupPermissionType( Window.CurrentAccount.ID, user == null ? group.ID : user.ID, user == null, permissionValue); if (state == null && perm != null) { // Moving to unset, so if a permission exists, delete it perm.Delete(); } else if (state != null) { if (perm == null) { // Create a new permission target if none exists perm = permissionsTable.NewAccountPermissionRow(); perm.AccountID = Window.CurrentAccount.ID; perm.TargetID = user != null ? user.ID : group.ID; perm.TargetIsGroup = user == null; perm.PermissionType = permissionValue; perm.Value = true; permissionsTable.Rows.Add(perm); } else if (perm.RowState == DataRowState.Deleted) { // If the target was deleted, restore it perm.RejectChanges(); } // Apply the correct value if (state == true) { perm.Value = true; } else { perm.Value = false; } } }
/// <summary> /// Open the dialog /// </summary> private void PermissionTarget_dialog_Open(object sender, RoutedEventArgs e) { // Set dataItem as current item ListViewItem currentItem = _listTable.GetParentListViewItem(e.OriginalSource as FrameworkElement); Oltp.UserRow user = currentItem.Content as Oltp.UserRow; Oltp.UserGroupRow group = currentItem.Content as Oltp.UserGroupRow; // Retrieve applied permissions from the server Oltp.AccountPermissionDataTable permissionsTable = null; Window.AsyncOperation(delegate() { using (OltpProxy proxy = new OltpProxy()) { permissionsTable = proxy.Service.AccountPermission_Get(Window.CurrentAccount.ID, user == null ? group.ID : user.ID, user == null ); } }, delegate(Exception ex) { MainWindow.MessageBoxError("Failed to open permissions.", ex); return(false); }, delegate() { _openingDialog = true; // Apply retrieved permissions to the GUI radio buttons ListBox permissionsList = VisualTree.GetChild <ListBox>(PermissionTarget_dialog); for (int i = 0; i < permissionsList.Items.Count; i++) { ApiMenuItem x = (ApiMenuItem)permissionsList.Items[i]; string permissionValue = x.Path; if (permissionValue == null) { continue; } Oltp.AccountPermissionRow perm = permissionsTable.FindByAccountIDTargetIDTargetIsGroupPermissionType( Window.CurrentAccount.ID, user == null ? group.ID : user.ID, user == null, permissionValue); ListBoxItem lbItem = (ListBoxItem)permissionsList.ItemContainerGenerator.ContainerFromIndex(i); if (perm == null) { VisualTree.GetChild <RadioButton>(lbItem, "radioNotSet").IsChecked = true; } else if (perm.Value) { VisualTree.GetChild <RadioButton>(lbItem, "radioAllow").IsChecked = true; } else { VisualTree.GetChild <RadioButton>(lbItem, "radioDeny").IsChecked = true; } } currentItem.IsSelected = true; // Show the dialog PermissionTarget_dialog.Title = String.Format("Editing permissions for {0}", user == null ? group.Name : user.Name); PermissionTarget_dialog.BeginEdit(new object[] { user == null ? group as DataRow : user as DataRow, permissionsTable }); _openingDialog = false; }); }