2

首先,我有一个如下所示的表格:

用户任务

然后,从我的代码中,我有一种检查用户权限的方法

  public bool HasPermission(Guid userTaskId)

每次我将新行插入 usertask 表(通过 sql 脚本)时,我必须将其 id 存储到一个常量以检查其权限,如下所示:

  public static readonly Guid TaskA = new Guid("6F28B771-2E3E-47DD-9CB4-48B4130A8CBE");
  public static readonly Guid TaskB = new Guid("8B273B24-AD3A-41D6-969D-49A854B4E896");

  // Check permission
  if(HasPermission(Helper.TaskA)){
       // Do something if user has permission on task A
  }

问题是我的程序有很多任务,我需要存储很多常量。无论如何,是否有动态检查权限而不手动存储所有权限?平均应用程序允许管理员用户动态添加他们想要的许多任务,然后我可以检查其他用户的所有任务的权限。
提前致谢。

4

1 回答 1

0

如何利用Dictionary. 您可以像这样预先缓存所有密钥:

var tasks = new Dictionary<string, string>();
var selectCmd = "SELECT UserTaskId, Name FROM UserTasks";

using (SqlConnection c = new SqlConnection(connString))
{
    c.Open();
    using (SqlCommand cmd = new SqlCommand(selectCmd, c))
    {
        // provide any parameters

        using (SqlDataReader rdr = cmd.ExecuteReader())
        {
            tasks.Add(rdr.GetString(0), rdr.GetString(1));
        }
    }
}

现在,您需要在Dictionary可以全局访问的地方创建并存储它。也许是一个Singleton名为GlobalConfiguration.

然后你会改变你打电话的方式HasPermission只收到一个string

public bool HasPermission(string userTaskId) ...

现在,我认为这里可能还缺少一个字段 - UserId. 但我现在看不到。您将要创建一个Dictionary<string, List<string>>来容纳用户拥有的权限。您将以与另一个非常相似的方式填写它。

另一件事。现在您正在通过 访问它UserTaskId,但如果可能,请切换它以使用Name。您可以简单地切换在我的示例中选择字段的顺序。

于 2013-06-15T09:46:14.413 回答