![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Есть БД с таблицей users. На форме: txtLogin, txtPassword, btnLogin, btnRegistration (при нажатии на btnRegistration появляются: txtFName, txtLName, txtPhone, btnSend)
Самому первому зарегистрировавшемуся пользователю присвоить все права (RAdmin = true) остальным присваивать (RAdmin = false) Потом первый пользователь сможет принимать решения кому назначать еще права администратора. Пользователям нельзя редактировать и недоступны некоторые функции программы (назначение прав...) С вашей помощью хочеться реализовать такое. |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
А в чём, собственно, проблема?
|
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Exception, хочеться реализовать так, чтобы было универсально и граммотно.
Чтобы присвоить права только первому пользователю как лучше поступить? Сделать проверку на значение в БД и если такое есть то присваивать только RAdmin = false? |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
Просто проверяй количество записей в таблице. Если их нет -- устанавливай у новой записи флаг в true, если есть хоть одна -- в false.
А вообще, о том, как грамотно реализовать авторизацию, смотри тут: http://www.codeguru.com/csharp/.net/net_se...icle.php/c7415/ Добавлено через 7 минут и 58 секунд http://www.codeguru.com/dbfiles/get_file/R...amp;ds=20040618 -- готовая программа-пример. |
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Вот что пока получается:
Ошибка: Must declare the scalar variable "@ID" Добавлено через 2 минуты и 11 секунд Пока писал сообщение даж не заметил, Exception, спасибо за примеры буду разбираться с ними тоже) |
|||
|
||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
Наверное, ты имел в виду "WHERE ID = @Original_ID"
![]() |
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Exception, если честно то не могу понять где ошибка все-равно
![]() ID (is identity = true, и Primery key)
Сделал проверку, заполнил датасет и вывел его в датагрид все ок! Но вот обновить БД не получается((( Код взят из книги Майк Гандерлой, Джозеф Джорден, ... SQL Server 2005 Если можно, объясните плиз как лучше через код использовать эти все команды и чутка комментарий к строчкам)... а то авторы книги, на комментарии к коду, времени не тратили (( Добавлено через 3 минуты и 36 секунд Еще куда фак пропал? там была хорошая статья про SQL запросы, мне бы она сейчас очень пригодилась ![]() |
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Обновилась после добавления всего этого... Проще можно решение? |
|||
|
||||
tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 11 Всего: 170 |
тебе же Exception, написал, у тебя синтаксическая ошибка в строке запроса
вместо
нужно
-------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
tol05, я уже так пробовал, не помогает... таже ошибка ((
Ошибка: Must declare the scalar variable "@ID" |
|||
|
||||
Idsa |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
У тебя, видимо, не одна ошибка. Верни @ на место ![]() В какой строчке? P. S. А ты какую СУБД используешь? |
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
||||
|
||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Так ты же добавляешь параметры, а значения им не присваиваешь. Кроме того, int весит 4 байта, а не 1. Да и вообще, размер для int указывать не нужно. Для добавления параметров тебе следует использовать, например, следующий код:
В случае использования int можно забить на size (для varchar так лучше не делать), да и тип автоматически определится, поэтому можно использовать короткую запись:
|
||||
|
|||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Все теперь понятно почему ошибка. Намудрил кучу всего лишнего, датасет зачем-то привизал.
Idsa, спасибо! буду знать на счет типа.
С этим разобрался! Теперь необходимо проверить есть ли такой пользователь в БД и какие у него права. Если все ок, то открыть следующую форму с наличием на ней того функционала который полагается пользователю с его правами. Как осуществить проверку? Есть только одна мысль - сравнить txtLogin со столбцом Login, если нашел запомнить номер ID/строки и сверить пароль находящийся там с txtPassword. |
|||
|
||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Зачем искать ID? Нужно составить запрос, например, такой:
Параметрам login и password присвоить значения txtLogin и txtPassword соответственно. После выполнения ExecuteReader() проверить: если reader.HasRows == false, выдать MessageBox с сообщением "Неверный логин или пароль", иначе выполнить reader.Read() и проверить reader["RAdmin"]. Ну а дальше уже реализуй логику своего приложения. |
||||
|
|||||
Redstuff |
|
||||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Действительно на SQL запросе лучше)
dr.Read() - одно чтение строки и продвижение вперед?
Это не понял как реализовать. Поэтому при правильном логине и пароле выдает всегда Admin. |
||||
|
|||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Не "и", а "или".
dr.Read() всегда будет равен true при первом Read, т. к. до этого ты проверил, что HasRows != false. Это так, отступление. Вообще здесь (в else) должен быть другой код. Например:
Теперь ты знаешь, админ ли авторизовавшийся пользователь. Это сообщение отредактировал(а) Idsa - 15.8.2007, 21:01 |
||||
|
|||||
Redstuff |
|
||||||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
У меня так не хотело работать, пробовал так еще до этого примера ![]() Работает только так:
Но все-равно спасибо! ![]() |
||||||
|
|||||||
Exception |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 2 Всего: 186 |
Тьфу, можно было красиво реализовать через role-based security. Я же дал ссылки.
|
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Exception, за ссылочки правдо спасибо, но пока для меня там все кажется так наворочено.
|
|||
|
||||
Redstuff |
|
|||
![]() Команда REDSTUFF ![]() ![]() Профиль Группа: Участник Сообщений: 497 Регистрация: 27.5.2006 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Exception, а есть уже готовая БД с того примера? я с картинки БД постарался у себя воссоздать, но не знаю какой тип для некоторых полей. Ввожу пароль и логин (завел уже в базе), но сообщение о правах выскакивает.
|
|||
|
||||
Idsa |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Зачем мудрить? Логика у нас уже реализована. Осталось заменить использование булевой переменной isAdmin на role-based подход. Хотя по большому счету я не вижу необходимости использовать роли в данном примере, т. к. тщательная реализация ролей потребует анализа того, что можно и чего нельзя тому или иному типу пользователей (а если код пишется без предварительного проектирования, то на данный момент это может быть затруднительно)... а у нас всего 2 типа пользователей, так что игра не стоит свеч. Если все-таки очень сильно хочется... заменяем код определения типа пользователя на следующий код:
Тогда в любом месте программы узнать тип пользователя можно будет вот так: if (Thread.CurrentPrincipal.Identity.Name == "Administrator") ... Вместо ролей конструктору GenericPrincipal я передаю null... Это несколько нивелирует преимущество использования role-based подхода. Хорошо было бы лишить код этого недостатка (это я оставляю на совести автора программы ![]() |
||||
|
|||||
DEADLY |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 23.8.2007 Репутация: нет Всего: 1 |
а как получить имя пользователя???
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |