#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);
}
}
}