动态存储用户数据

时间:2013-06-15 09:33:23

标签: c# sql-server wpf

首先,我的表格如下:

user task

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

  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
  }

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

1 个答案:

答案 0 :(得分: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代替。您可以在我的示例中简单地切换选择字段的顺序。