Имя пользователя и роль - PullRequest
       11

Имя пользователя и роль

0 голосов
/ 15 февраля 2009

У меня есть следующие базы данных: 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 Ответ

3 голосов
/ 15 февраля 2009

Сначала постарайтесь не хранить пароли в базе данных; лучше хранить хеш. Я не совсем уверен, что вы имеете в виду «назначить роль пользователю» - вам трудно получить роль из БД? Или вы не знаете, что с этим делать потом? Если последнее, то «основной» путь; на простейшем уровне:

        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");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...