2009-12-01 6 views
0

J'ai conçu plusieurs applications client/serveur. Je travaille sur un projet impliquant un utilisateur se connectant pour accéder à l'application. Je regarde la méthode la plus efficace et «simple» de stocker les autorisations des utilisateurs une fois connecté à l'application qui peut être utilisée tout en restreignant l'accès à certains onglets sur le formulaire principal.
J'ai créé une classe statique appelée « User » détaillée ci-dessous:Stockage/accès aux rôles d'accès utilisateur C# Winforms

static class User 
{ 
    public static int _userID; 
    public static string _moduleName; 
    public static string _userName; 

    public static object[] UserData(object[] _dataRow) 
    { 
     _userID = (int)_dataRow[0]; 
     _userName = (string)_dataRow[1]; 
     _moduleName = (string)_dataRow[2]; 

     return _moduleName; 
    } 



} 

Lorsque l'utilisateur se connecte et ils ont été authentifiés, je souhaite stocker les objets _moduleName en mémoire afin que je peux contrôler les onglets de la contrôle de tabulation de formulaire principal, ils peuvent accéder, par exemple; si les rôles suivants ont été attribués à l'utilisateur dans la base de données: "Livre des ventes", "Livre des achats", ils ne peuvent voir les onglets correspondants sur le formulaire qu'en utilisant un bloc Switch-Case une fois le formulaire de connexion masqué. La forme principale est instanciée. Je peux stocker les variables userId et USERNAME sous la forme principale une fois qu'il charge au moyen de dire par exemple:

nous traitons ici les données de connexion de l'utilisateur:

DataAccess _dal = new DataAccess(); 
     switch (_dal.ValidateLogin(txtUserName.Text, txtPassword.Text)) 
     { 
      case DataAccess.ValidationCode.ConnectionFailed: 
       MessageBox.Show("Database Server Connection Failed!"); 
       break; 

      case DataAccess.ValidationCode .LoginFailed: 
       MessageBox.Show("Login Failed!"); 
       _dal.RecordLogin(out errMsg, txtUserName.Text, workstationID, false); 
       break; 

      case DataAccess.ValidationCode .LoginSucceeded: 
       frmMain frmMain = new frmMain(); 
       _dal.GetUserPrivList(out errMsg,2); //< here I access my DB and get the user permissions based on the current login. 

       frmMain.Show(); 
       this.Hide(); 
       break; 

      default: 
       break; 
     } 

    private void frmMain_Load(object sender, EventArgs e) 
    { 
     int UserID = User._userID; 
    } 

Cela fonctionne très bien, mais les _modules objet contient plusieurs permissions/rôles en fonction de ce qui a été défini dans la base de données, comment puis-je stocker les multiples valeurs et y accéder via un bloc Switch-Case?

Répondre

0

Si je comprends bien, vous voulez pouvoir stocker les permissions/rôles en tant que valeur dans une base de données par utilisateur. Je crois que vous pouvez écrire un entier à un champ de base de données comme: RolesID. Écrivez dans votre base de données la valeur du drapeau. Quelque chose comme:

[Flag] 
public enum ROLES 
{ 
    Administrator = 1, 
    User = 2, 
    OtherRole3 = 4, 
    OtherRole4 = 8 
} 

Vous devriez être en mesure de lire cette valeur et attribuer à un champ déclaré comme:

ROLES userRoles = GetRoleValueFromDB(); 

Je suis certain que je l'ai déjà fait.

HTH ...

Questions connexes