2013-06-15 5 views
2

d'abord, je regarde la table comme ceci:
Dynamiquement données utilisateur magasin

user task

Puis, à partir de mon code, j'ai une méthode pour vérifier l'autorisation de l'utilisateur

public bool HasPermission(Guid userTaskId) 

Chaque fois que J'insère une nouvelle ligne dans la table usertask (par script sql), je dois la stocker id à une constante pour vérifier sa permission, comme ci-dessous:

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 
    } 

Le problème est mon programme a beaucoup de tâches, et je dois stocker de nombreuses constantes. Est-il de toute façon dynamique de vérifier la permission sans stocker tous à la main? L'application moyenne permet à l'utilisateur admin d'ajouter dynamiquement plusieurs tâches qu'il souhaite, puis je peux vérifier l'autorisation de toutes les tâches pour un autre utilisateur.
Merci d'avance.

+2

Je ne sais pas ce que votre question est ici ... –

+0

Tu ne peux pas créer une nouvelle table dans la base de données UsersTasksPermissions et y stocker les informations? – alfoks

Répondre

0

Que diriez-vous tirer parti d'un Dictionary. Vous pouvez mettre en cache toutes vos clés à l'avant comme ceci:

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)); 
     } 
    } 
} 

Maintenant, vous aurez besoin de créer et de stocker ce Dictionary quelque part que vous pouvez y accéder à l'échelle mondiale. Peut-être un Singleton nommé GlobalConfiguration.

Ensuite, vous changer la façon dont vous appelez HasPermission pour recevoir juste un string:

public bool HasPermission(string userTaskId) ... 

Maintenant, je pense qu'il peut y avoir un champ plus qui manque ici -le UserId. Mais je ne le vois pas pour le moment. Vous allez vouloir créer un Dictionary<string, List<string>> pour héberger les permissions d'un utilisateur. Vous le remplissez de manière très similaire à l'autre.

Une autre chose. En ce moment, vous accédez par UserTaskId, mais s'il est possible, passer que autour d'utiliser le Name à la place. Vous pouvez simplement changer l'ordre dans lequel les champs sont sélectionnés dans mon exemple.

Questions connexes