首先,我的表格如下:
然后,从我的代码中,我有一个检查用户权限的方法
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
}
问题是我的程序有很多任务,我需要存储很多常量。无论如何动态地检查权限而不用手工存储所有这些权限?平均应用程序允许管理员用户动态添加他们想要的许多任务,然后我可以检查其他用户的所有任务的权限 提前致谢。
答案 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
代替。您可以在我的示例中简单地切换选择字段的顺序。