在C#中:如何创建包含控件的元组列表和有权访问此控件的用户列表?

西坡

我正在为一家律师事务所构建C#应用程序。在每个目录FormControl,只有某些用户可以访问某些目录(对于其他用户-这些目录Control将被禁用)。

我是这样构建的:有一个名为的类AuthorizedForm,它继承自Form此类具有一种称为的方法SetAuthorization,该方法可启用Control用户可能访问的所有,并禁用其余的。应用程序中的每种形式都继承自AuthorizedForm

当用户登录时,该SetAuthorization方法将被调用并接收登录用户的ID和规则列表作为参数。每个规则都包含一个Control和可以访问该列表的用户列表Control

该列表实际上分为两个列表:用户组(例如律师,律师助理等)和个人用户。因此,例如,如果我将“管理员”组的ID和“律师”组的ID放在第一个列表中,而其中一个秘书的ID放在了第二个列表中-则将Control定义Enabled为所有管理员和律师,以及该秘书,而其他办公室员工的Control定义为Disabled

该列表被调用AuthorizationList,并且实际上是一个从Listtype的类继承的类,该类Tuple接收a Control,aGroupList和a UserList(最后两个不过是Listtype的a byte)。

的定义 GroupList UserList

public class GroupList : List<byte> { }
public class UserList : List<byte> { }

AuthorizedList 的代码(在答案的帮助下构建

public class AuthorizationList : List<Tuple<Control, GroupList, UserList>>
{
    public void Add(Control control, GroupList groups, UserList users)
    {
        Add(new Tuple<Control, GroupList, UserList>(control, groups, users));
    }
}

AuthorizedForm 类:

public class AuthorizedForm : Form
{
    public void SetAuthorization(User loggedInUser, AuthorizationList authorizationList)
    {
        foreach (var rule in authorizationList)
        {
            bool isAuthorized = false;

            foreach (byte group in rule.Item2)
            {
                if (group == loggedInUser.Group)
                {
                    isAuthorized = true;
                    break;
                }
            }

            if (!isAuthorized)
            {
                foreach (byte user in rule.Item3)
                {
                    if (user == loggedInUser.Id)
                    {
                        isAuthorized = true;
                        break;
                    }
                }
            }

            if(!isAuthorized)
            {
                rule.Item1.Enabled = false;
            }
        }
    }
}

该呼吁 SetAuthorization 从登录功能:

if (user.isLoggedIn)
{
    SetAuthorization(user, new AuthorizationList()
    {
        /*
          CONTROL  |    GROUPS IDS LIST    |     USER IDS LIST
        */        
        { textBox1, new GroupList() { 1, 2, 3 }, new UserList() { 4 } },
        { textBox2, new GroupList() { 1, 2 },    new UserList() { 4 } },
        { button1,  new GroupList() { 1 },       new UserList() { 4, 3 } },
    });
}

现在,我也希望AuthorizationList成为Tuple接收aControlGroupListonly或aControlUserListonly的类型,因此我可以为用户组设置权限,也可以为单个用户设置权限。

我想不出一种方法,而无需显着更改我编写的代码。有没有办法以一种相对简单而优雅的方式做到这一点?如果不是,您将如何建议呢?

马克斯·索林

如何使用不是Tuple的对象来保存授权,它比Tuple <>更优雅:

public class GroupList : List<byte> { }
public class UserList  : List<byte> { }

public class Authorization
{
    public Control    Control   { get; set; }
    public GroupList  Groups { get; set; }
    public UserList   Users { get; set; }
}

public class AuthorizationList : List<Authorization>
{
    public void Add(Control control, GroupList groupList, UserList userList)
    {
        Add(new Authorization
        {
            Control = control,
            Groups = groupList,
            Users = userList
        });
    }

    public void Add(Control control, GroupList groupList)
    {
        Add(control, groupList, null);
    }

    public void Add(Control control, UserList userList)
    {
        Add(control, null, userList);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有权访问门户的用户列表

来自分类Dev

如何以编程方式获取有权访问SharePoint中的文件或文件夹的用户和组的列表

来自分类Dev

(C#)使用for循环创建用户控件组件,并将这些组件放入列表中

来自分类Dev

首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

来自分类Dev

用户控件和列表<类>

来自分类Dev

无法在C#中创建用户控件

来自分类Dev

C#引发控件列表中的事件

来自分类Dev

元组包含C#中的拖曳列表

来自分类Dev

您如何处理包含列表的 WPF 用户控件中的嵌套绑定?

来自分类Dev

如何从主页的javascript函数访问用户控件页面下拉列表控件ID?

来自分类Dev

列出用户有权访问的文件和目录

来自分类Dev

在列表框中嵌套有用户控件的自定义用户控件

来自分类Dev

如何获取应用程序有权访问的Facebook广告帐户列表

来自分类Dev

如何使用MVVM管理列表框中的用户控件?

来自分类Dev

如何访问动态创建的用户控件的属性?

来自分类Dev

动态创建的用户控件中的访问方法?

来自分类Dev

如何获取此包含元组的列表中的最小值?

来自分类Dev

如何在C#中为动态创建的用户控件创建单击事件?

来自分类Dev

如何在重复控件中访问带有 json 对象的数组列表

来自分类Dev

列表或表控件中的SAPUI5访问控件

来自分类Dev

如何使用C#创建不带图形的用户控件

来自分类Dev

在C#中创建用户控件时遇到问题

来自分类Dev

如何访问由Designer(XAML)创建的xamarin(C#,Visual Studio 2015)中的控件

来自分类Dev

如何访问由Designer(XAML)创建的xamarin(C#,Visual Studio 2015)中的控件

来自分类Dev

如何从父aspx页访问子用户控件中的控件

来自分类Dev

如何重新访问之前在子控件中声明的用户控件?

来自分类Dev

如何从母版页访问用户控件中的控件?

来自分类Dev

如何重新访问之前在子控件中声明的用户控件?

Related 相关文章

  1. 1

    有权访问门户的用户列表

  2. 2

    如何以编程方式获取有权访问SharePoint中的文件或文件夹的用户和组的列表

  3. 3

    (C#)使用for循环创建用户控件组件,并将这些组件放入列表中

  4. 4

    首页> C#>如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  5. 5

    c#-如何检查当前登录的用户是否有权访问Sharepoint 2013中的页面

  6. 6

    用户控件和列表<类>

  7. 7

    无法在C#中创建用户控件

  8. 8

    C#引发控件列表中的事件

  9. 9

    元组包含C#中的拖曳列表

  10. 10

    您如何处理包含列表的 WPF 用户控件中的嵌套绑定?

  11. 11

    如何从主页的javascript函数访问用户控件页面下拉列表控件ID?

  12. 12

    列出用户有权访问的文件和目录

  13. 13

    在列表框中嵌套有用户控件的自定义用户控件

  14. 14

    如何获取应用程序有权访问的Facebook广告帐户列表

  15. 15

    如何使用MVVM管理列表框中的用户控件?

  16. 16

    如何访问动态创建的用户控件的属性?

  17. 17

    动态创建的用户控件中的访问方法?

  18. 18

    如何获取此包含元组的列表中的最小值?

  19. 19

    如何在C#中为动态创建的用户控件创建单击事件?

  20. 20

    如何在重复控件中访问带有 json 对象的数组列表

  21. 21

    列表或表控件中的SAPUI5访问控件

  22. 22

    如何使用C#创建不带图形的用户控件

  23. 23

    在C#中创建用户控件时遇到问题

  24. 24

    如何访问由Designer(XAML)创建的xamarin(C#,Visual Studio 2015)中的控件

  25. 25

    如何访问由Designer(XAML)创建的xamarin(C#,Visual Studio 2015)中的控件

  26. 26

    如何从父aspx页访问子用户控件中的控件

  27. 27

    如何重新访问之前在子控件中声明的用户控件?

  28. 28

    如何从母版页访问用户控件中的控件?

  29. 29

    如何重新访问之前在子控件中声明的用户控件?

热门标签

归档