通过功能/方法启用/禁用按钮(C#)

时间:2017-10-12 14:42:46

标签: c# winforms function coding-style

  1. 我有8个按钮,每个按钮执行不同的任务,即编辑,删除,创建等,以及每个任务的上下文菜单

  2. 我在DB中有一个名为 Moderations 的表,它由bool组成,即groupTitle,canEdit,canDelete,canCreate ..... groupTitle是string not bool

    < / LI>
  3. 我有一个bool函数 canDoIt(task,userid)来检查登录用户(具有特定的groupTitle),是否可以执行或不能(函数返回true或者提供的任务为false,简而言之)

  4. 假设,我想检查登录用户是否可以执行任务,通过canDoit(任务,用户ID)检查,如果他不能,则按钮将被禁用,否则将不会.... OnForm_Load我抛出函数(或者在我需要时可能是另一次)并检查每个按钮,即

    btnEdit.Enabled = canDo("canEdit", userID)
    btnDelete.Enabled = canDo("canDelete", userID)
    btnCreate.Enabled = canDo("canCreat", userID)
    
    cnxMenuEdit.Enabled = canDo("canEdit", userID)
    cnxMenuDelete.Enabled = canDo("canDelete", userID)
    .
    .
    .
    .....and so on and so forth.
    

    我的方法工作得很好但是我有疑问和问题......

    第一个问题,这样好吗? 第二个问题,它是否专业? 另一个是,会影响程序或数据库的性能吗?

    很抱歉,如果已经询问/发布了.....

1 个答案:

答案 0 :(得分:0)

您需要将登录用户的访问权限保留在内存中。 创建一个包含访问权限列表的用户模型,在用户登录时将其加载到某个静态对象,然后在需要时检查访问权限。

像这样的东西

public class UserModel 
{
    public List<UserAccessRight> AccessRights {get; set;}
}

public class UserAccessRight
{
    public string Name {get; set;}
}

public static class SomeAuthHelperClass
{
    public UserModel CurrentUser {get; set;}

    // some helper methods to retrieve data etc.

   public static CanDo(string accessRight)
   {
       return CurrentUser.AccessRights.Contains(ar => ar.Name.Equals(accessRight);
   }
}
.....

btnEdit.Enabled = SomeAuthHelperClass.CanDo("EditSomething");