2009-02-15 80 views
0

我有这个数据库:table<User>(UserID,Name,Surname,Username,Password,Email),table<Role>(RoleID,RoleName,Description)table<UsersInRole>(UserID,RoleID)。我使用用户名和密码创建了一个登录认证来访问应用程序(使用Linq ToSql存储数据),这是正确的。 现在我想为每个用户创建一个角色,但我不知道如何解决它;我看到了一些关于它的功能,但它指的是web.app。用户名和角色

这是适用于登录程序的代码:

public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 
     } 


     public bool ValidateApplicationUser(string userName, string password) 
     { 
      { 
       var AuthContext = new DataClasses1DataContext(); 
       var query = from c in AuthContext.Users 
          where (c.Username == userName.ToLower() && c.Password == password.ToLower()) 
          select c; 

       if(query.Count() != 0) 
       { 
        return true; 
       } 

       return false; 
      } 

     } 

     private void mahhh(object sender, RoutedEventArgs e) 
     { 
      bool authenticated = true; 
      { 
       if (usernameTextBox.Text !="" && passwordTextBox.Text != "") 
       { 
        authenticated = ValidateApplicationUser(usernameTextBox.Text , passwordTextBox.Text); 
       } 

      } 
      if (!authenticated) 
      { 
       MessageBox.Show("Invalid login. Try again."); 
      } 
      else 
      { 
       MessageBox.Show("Congradulations! You're a valid user!"); 
       Window3 c = new Window3(); 
       c.ShowDialog(); 
       this.Close(); 
      } 
     } 
    } 

我不知道如何实现将角色分配给用户的方法。 你有什么想法或建议做对吗?

回答

3

首先,尽量不要在数据库中存储密码;最好存储一个散列。我不太清楚你的意思是“给用户分配一个角色” - 你是否难以从数据库中获得角色?或者你不确定后来该怎么办?如果是后者,“主”就是要走的路;在最简单的级别:

 string username = ... 
     string[] roles = ... 
     Thread.CurrentPrincipal = new GenericPrincipal(
      new GenericIdentity(username), roles); 

现在您可以使用基于角色的安全性,无论是声明式还是命令式。

声明:

[PrincipalPermission(SecurityAction.Demand, Role="ADMIN")] 
    public void Foo() 
    { // validated automatically by the .NET runtime ;-p 

    } 

势在必行:

static bool IsInRole(string role) 
    { 
     IPrincipal principal = Thread.CurrentPrincipal; 
     return principal != null && principal.IsInRole(role); 
    } 
    ... 
    bool isAdmin = IsInRole("ADMIN"); 
+0

嗨马克, 我的目的是,比如我有一个用户名“employee1”所以我给它来访问应用程序中的作用查看只有一些窗口,否认删除,添加和编辑数据库。所以在应用程序中进行身份验证后,我希望为用户“employee1”分配角色。感谢您的回复 – JayJay 2009-02-15 14:19:02