Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Авторизация пользователей 
:(
    Опции темы
Redstuff
Дата 15.8.2007, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Действительно на SQL запросе лучше)
Код

            SqlCommand cmd = new SqlCommand("SELECT RAdmin FROM Users WHERE Login = @login AND Password = @password", con);
            da.SelectCommand = cmd;
            cmd.Parameters.Add("@Login", SqlDbType.NVarChar, 20);
            cmd.Parameters["@Login"].Value = txtLogin.Text;
            cmd.Parameters.Add("@Password", SqlDbType.NVarChar, 20);
            cmd.Parameters["@Password"].Value = txtPassword.Text;
                         
            con.Open();
            SqlDataReader dr = cmd.ExecuteReader();
            if (dr.HasRows == false)
            {
                MessageBox.Show("Неверный логин и пароль!");
            }
            else
            {
                if (dr.Read() == true)
                {
                    MessageBox.Show("Admin");
                }
                else
                {
                    MessageBox.Show("User");
                }
            }

dr.Read() - одно чтение строки и продвижение вперед?
Цитата

и проверить reader["RAdmin"]

Это не понял как реализовать.
Поэтому при правильном логине и пароле выдает всегда Admin.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Idsa
Дата 15.8.2007, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Redstuff @  15.8.2007,  20:22 Найти цитируемый пост)
Неверный логин и пароль

Не "и", а "или".

Цитата(Redstuff @  15.8.2007,  20:22 Найти цитируемый пост)
  
if (dr.Read() == true)
                {
                    MessageBox.Show("Admin");
                }
                else
                {
                    MessageBox.Show("User");
                }

dr.Read() всегда будет равен true при первом Read, т. к. до этого ты проверил, что HasRows != false. Это так, отступление.
Вообще здесь (в else) должен быть другой код. Например:
Код

dr.Read();
bool RAdmin = false;
if (dr["RAdmin"] == true)
 RAdmin = true;

Теперь ты знаешь, админ ли авторизовавшийся пользователь.

Это сообщение отредактировал(а) Idsa - 15.8.2007, 21:01


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Redstuff
Дата 15.8.2007, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Цитата(Idsa @ 15.8.2007,  21:00)
Код

dr.Read();
bool RAdmin = false;
if (dr["RAdmin"] == true)
 RAdmin = true;


У меня так не хотело работать, пробовал так еще до этого примера  smile 
Работает только так:
Код

                dr.Read();
                bool RAdmin = false;
                if (Convert.ToBoolean(dr["RAdmin"]) == true)
                {
                    MessageBox.Show("Admin");
                }
                else
                {
                    MessageBox.Show("User");
                }

Но все-равно спасибо!  smile 


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Exception
Дата 16.8.2007, 01:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 2
Всего: 186



Тьфу, можно было красиво реализовать через role-based security. Я же дал ссылки.
PM   Вверх
Redstuff
Дата 16.8.2007, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Exception, за ссылочки правдо спасибо, но пока для меня там все кажется так наворочено.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Redstuff
Дата 16.8.2007, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


Профиль
Группа: Участник
Сообщений: 497
Регистрация: 27.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 1



Exception, а есть уже готовая БД с того примера? я с картинки БД постарался у себя воссоздать, но не знаю какой тип для некоторых полей. Ввожу пароль и логин (завел уже в базе), но сообщение о правах выскакивает.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Idsa
Дата 19.8.2007, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 15
Всего: 62



Цитата(Redstuff @  16.8.2007,  10:42 Найти цитируемый пост)
я с картинки БД постарался у себя воссоздать, но не знаю какой тип для некоторых полей. Ввожу пароль и логин (завел уже в базе), но сообщение о правах выскакивает. 

Зачем мудрить? Логика у нас уже реализована. Осталось заменить использование булевой переменной isAdmin на role-based подход.
Хотя по большому счету я не вижу необходимости использовать роли в данном примере, т. к. тщательная реализация ролей потребует анализа того, что можно и чего нельзя тому или иному типу пользователей (а если код пишется без предварительного проектирования, то на данный момент это может быть затруднительно)... а у нас всего 2 типа пользователей, так что игра не стоит свеч.
Если все-таки очень сильно хочется... заменяем код определения типа пользователя на следующий код:
Код

if (dr.HasRows == false)
      {
        MessageBox.Show("Неверный логин и пароль!");
      }
      else
      {
        GenericIdentity currentIdentity = null;
        GenericPrincipal currentPrincipal = null;
        dr.Read();
        if (Convert.ToBoolean(dr["RAdmin"]) == true)
          currentIdentity = GenericIdentity("Administrator");
        else
          currentIdentity = GenericIdentity("User");
        currentPrincipal = new GenericPrincipal(currentIdentity, null);
        Thread.CurrentPrincipal = currentPrincipal;
      }


Тогда в любом месте программы узнать тип пользователя можно будет вот так:
if (Thread.CurrentPrincipal.Identity.Name == "Administrator")
...

Вместо ролей конструктору GenericPrincipal я передаю null... Это несколько нивелирует преимущество использования role-based подхода. Хорошо было бы лишить код этого недостатка (это я оставляю на совести автора программы smile ). Хотя даже без ролей у этого кода есть неоспоримые преимущества: 1. гибкость: не нужно заводить для каждого вновь появившегося типа юзера булеву переменную (использование ролей придает проекту еще больше гибкости) 2. не нужно беспокоиться об области видимости булевых переменных-ролей, т. к. наш GenericPrincipal можно получить из Thread.CurrentPrincipal (хоть это немного и снижает производительность).


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
DEADLY
Дата 30.12.2009, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 23.8.2007

Репутация: нет
Всего: 1



а как получить имя пользователя???
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1273 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.