【问题标题】:Username and role用户名和角色
【发布时间】:2011-12-01 21:47:19
【问题描述】:

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

我不知道如何实现为用户分配角色的方法。 您有什么想法或建议改正吗?

【问题讨论】:

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


    【解决方案1】:

    首先,尽量不要在数据库中存储密码;最好存储一个哈希。我不太确定您的意思是“为用户分配角色”-您是否难以从数据库中获取角色?或者您不确定之后如何处理它?如果是后者,“校长”是要走的路;在最简单的层面上:

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

    【讨论】:

    • 作为@Marc Gravell 帖子的补充:
      MSDN 上的一篇好文章"How to: Create GenericPrincipal and GenericIdentity Objects"
    • 嗨 Marc,我的目的是,例如,我有一个用户名“employee1”,所以我将赋予它访问应用程序的角色以仅查看某些窗口并拒绝删除、添加和编辑数据库.所以在应用程序中进行身份验证后,我希望为用户“employee1”分配角色。感谢您的回复
    • 嗨 MArc 真诚地,我不知道如何继续,所以我问你是否可以发布一个示例(代码)以更好地理解解决我的问题的过程。顺便说一下我正在寻找还存储哈希....祝您有美好的一天。再见
    • (已回复直接邮件)
    • 嗨,Marc,你能解释一下我必须把你的代码放在我项目代码后面的地方吗?谢谢你的支持。再见
    猜你喜欢
    • 1970-01-01
    • 2022-12-19
    • 1970-01-01
    • 2017-09-02
    • 1970-01-01
    • 2019-12-10
    • 2021-12-01
    • 2018-05-09
    • 1970-01-01
    相关资源
    最近更新 更多