#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
|
{
|
/// <summary>
|
/// 数据权限前端应用帮助类
|
/// </summary>
|
public class DataPermissionHelper
|
{
|
private static List<DataPermissionModel> _Config;
|
|
private static IDictionary<string, DataTable> _FieldNameDef =
|
new Dictionary<string, DataTable>();
|
|
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); //表格,删除列
|
}
|
}
|
}
|
|
/// <summary>
|
/// 刷新当前用户的数据权限配置
|
/// </summary>
|
public static void RefreshConfig()
|
{
|
_Config =
|
new bllPermission().GetDataPermissionConfig(Loginer.CurrentUser
|
.Account);
|
}
|
|
/// <summary>
|
/// 设置表格的权限
|
/// </summary>
|
/// <param name="view">表格</param>
|
/// <param name="DBName">数据库</param>
|
/// <param name="tableName">该数据库的表名</param>
|
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);
|
}
|
}
|
}
|