1
yhj
2024-07-24 5e5d945e91568b973faa27d8ab0bcef99fc4a6c5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#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);
        }
    }
}