Sic.Framework/MECF.Framework.UI.Core/Accounts/RoleEditView.xaml.cs

236 lines
9.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.Dynamic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using Aitex.Core.Account;
namespace MECF.Framework.UI.Core.Accounts
{
/// <summary>
/// Interaction logic for RoleEditView.xaml
/// </summary>
public partial class RoleEditView : Window
{
public RoleEditView()
{
InitializeComponent();
Loaded += new RoutedEventHandler(RoleEditView_Loaded);
dataGrid1.CanUserAddRows = false;
dataGrid1.RowHeight = 25;
}
public class PermissionClass
{
public static Dictionary<Permission_CN, string> ViewPermissionCheck = new Dictionary<Permission_CN, string>();
static IEnumerable<Permission_CN> permissions = Enum.GetValues(typeof(Permission_CN)).Cast<Permission_CN>();
static PermissionClass()
{
foreach (Permission_CN p in permissions)
{
if (p == Permission_CN.ProcessHidden)
{
//只针对ReactorProcess相关界面
ViewPermissionCheck.Add(p, "RecipeMonitor"); //"ProcessView"
}
else
{
ViewPermissionCheck.Add(p, "");
}
}
}
public static List<Permission_CN> GetPermissions(string viewName)
{
List<Permission_CN> permissionInfos = new List<Permission_CN>();
foreach (Permission_CN p in ViewPermissionCheck.Keys)
{
if (ViewPermissionCheck[p] == "")
permissionInfos.Add(p);
else if(viewName.IndexOf(ViewPermissionCheck[p])>=0)
permissionInfos.Add(p);
}
return permissionInfos;
}
}
public enum Permission_CN
{
Hidden,
ReadOnly,
Partial,
Full,
ProcessHidden
}
public List<ExpandoObject> DataSource = new List<ExpandoObject>();
void RoleEditView_Loaded(object sender, RoutedEventArgs e)
{
var viewList = AccountClient.Instance.Service.GetAllViewList();
var viewPermission = AccountClient.Instance.Service.GetAllRolesPermission();
//Dynamically do data binding function here
foreach (var role in viewPermission.Keys)
{
dynamic singleViewPermission = new ExpandoObject();
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>("RoleName", role));
foreach (var view in viewPermission[role].Keys)
{
switch (viewPermission[role][view])
{
case ViewPermission.Invisiable:
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.Hidden));
break;
case ViewPermission.Readonly:
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.ReadOnly));
break;
case ViewPermission.PartlyControl:
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.Partial));
break;
case ViewPermission.FullyControl:
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.Full));
break;
case ViewPermission.ProcessOPControl:
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.ProcessHidden));
break;
}
}
DataSource.Add(singleViewPermission);
}
dataGrid1.DataContext = DataSource;
//dynamically creating data grid column
foreach (var view in viewList)
{
var datagGridColumn = new DataGridComboBoxColumn() { Header = view.Value, Width = 100 };
dataGrid1.Columns.Add(datagGridColumn);
datagGridColumn.SelectedItemBinding = new Binding() { Path = new PropertyPath(view.Key) };
datagGridColumn.ItemsSource = PermissionClass.GetPermissions(view.Key);
}
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
Close();
}
private void btnAddNew_Click(object sender, RoutedEventArgs e)
{
dynamic singleViewPermission = new ExpandoObject();
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>("RoleName", "New Role"));
var viewList = AccountClient.Instance.Service.GetAllViewList();
foreach (var view in viewList.Keys)
{
((IDictionary<String, object>)singleViewPermission).Add(new KeyValuePair<string, object>(view, Permission_CN.Hidden));
}
DataSource.Add(singleViewPermission);
dataGrid1.DataContext = null;
dataGrid1.DataContext = DataSource;
}
/// <summary>
/// Save role to xml file
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnSave_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < DataSource.Count - 1; i++)
{
for (int j = i + 1; j < DataSource.Count; j++)
{
dynamic obj1 = DataSource[i];
dynamic obj2 = DataSource[j];
if (String.Compare(obj1.RoleName, obj2.RoleName) == 0)
{
MessageBox.Show(string.Format("\"{0}\" Existedmodify to save", obj1.RoleName), "Role Editor Error", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
}
}
var permissionDic = new Dictionary<string, Dictionary<string,ViewPermission>>();
foreach (dynamic role in DataSource)
{
permissionDic.Add(role.RoleName, new Dictionary<string, ViewPermission>());
foreach (var item in ((IDictionary<String, object>)role).Keys)
{
if (item == "RoleName") continue;
var perm = (Permission_CN)((IDictionary<String, object>)role)[item];
switch (perm)
{
case Permission_CN.Full:
permissionDic[role.RoleName].Add(item, ViewPermission.FullyControl);
break;
case Permission_CN.Partial:
permissionDic[role.RoleName].Add(item, ViewPermission.PartlyControl);
break;
case Permission_CN.ReadOnly:
permissionDic[role.RoleName].Add(item, ViewPermission.Readonly);
break;
case Permission_CN.Hidden:
permissionDic[role.RoleName].Add(item, ViewPermission.Invisiable);
break;
case Permission_CN.ProcessHidden:
permissionDic[role.RoleName].Add(item, ViewPermission.ProcessOPControl);
break;
}
}
}
if (AccountClient.Instance.Service.SaveAllRolesPermission(permissionDic))
{
MessageBox.Show(Application.Current.Resources["GlobalLableAccountViewSaveRoleOk"].ToString());
}
else
{
MessageBox.Show(Application.Current.Resources["GlobalLableAccountViewSaveRoleFailed"].ToString());
}
}
/// <summary>
/// Delete current selecte role
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRoleDelete_Click(object sender, RoutedEventArgs e)
{
dynamic obj = dataGrid1.SelectedItem;
if (obj != null)
{
if (MessageBox.Show(string.Format(Application.Current.Resources["GlobalLableAccountViewDeleteRoleInfo"].ToString(), obj.RoleName), Application.Current.Resources["GlobalLableAccountViewMsgTitle"].ToString(), MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
foreach (dynamic role in DataSource)
{
if (role.RoleName == obj.RoleName)
{
DataSource.Remove(role);
break;
}
}
dataGrid1.DataContext = null;
dataGrid1.DataContext = DataSource;
}
}
}
}
}