#region using System; using System.Collections.Generic; using System.Data; using System.Linq; using CSFrameworkV5.Business.BLL_Permission; using CSFrameworkV5.Core; using CSFrameworkV5.Interfaces.InterfaceModels; using DevExpress.XtraGrid.Views.Grid; #endregion namespace CSFrameworkV5.Library.CommonClass { /// /// 数据权限前端应用帮助类 /// public class DataPermissionHelper { private static List _Config; private static IDictionary _FieldNameDef = new Dictionary(); private static void HideColumn(GridView view, string allFields, string allowColumns) { if (string.IsNullOrWhiteSpace(allFields)) return; //没有配置数据权限,不处理 if (string.IsNullOrWhiteSpace(allowColumns)) return; //没有配置数据权限,不处理 //表格中所有列的字段 var list = view.Columns.ToArray().Select(e => e.FieldName) .ToArray(); //当前表所有字段 var arrAllfields = allFields.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); //能查看数据的字段(有权限的字段) var fields = allowColumns.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries); //获取差异字段(没有数据权限的字段) var exceptFields = list.Except(fields).ToArray(); //表格中移除没有数据权限的列 foreach (var field in exceptFields) { //必须是存在的物理字段 var w = arrAllfields.Where(e => e.ToLower() == field.ToLower()) .FirstOrDefault(); // if (arrAllfields.FindIndex(e => e.ToLower() == field.ToLower()) >= 0) if (!string.IsNullOrWhiteSpace(w)) { var col = view.Columns.ColumnByFieldName(field); if (col != null) view.Columns.Remove(col); //表格,删除列 } } } /// /// 刷新当前用户的数据权限配置 /// public static void RefreshConfig() { _Config = new bllPermission().GetDataPermissionConfig(Loginer.CurrentUser .Account); } /// /// 设置表格的权限 /// /// 表格 /// 数据库 /// 该数据库的表名 public static void SetPermission(GridView view, string DBName, string tableName) { //获取当前用户的数据权限配置 if (_Config == null) RefreshConfig(); //没有设置数据权限,不处理 if (_Config.Count == 0) return; //1.优先处理当前用户的数据权限配置 var m1 = _Config.Where(e => e.DataType.ToUpper() == "USER" && e.DBName.ToUpper() == DBName.ToUpper() && e.TableName.ToUpper() == tableName.ToUpper()).FirstOrDefault(); if (m1 != null) { HideColumn(view, m1.AllFields, m1.AllowColumns); return; } //2.处理当前用户所在组的数据权限配置 var m2 = _Config.Where(e => e.DataType.ToUpper() == "GROUP" && e.DBName.ToUpper() == DBName.ToUpper() && e.TableName.ToUpper() == tableName.ToUpper()).FirstOrDefault(); if (m2 != null) HideColumn(view, m2.AllFields, m2.AllowColumns); } } }