用户名和角色

时间:2009-02-15 10:34:05

标签: c# .net linq-to-sql

我有这些数据库: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();
            }
        }
    }

我不知道如何实现一种方法来为用户分配角色。 你有任何想法或建议做对吗?

1 个答案:

答案 0 :(得分: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");