Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
Мыслящий
1 / 1 / 2
Регистрация: 21.02.2012
Сообщений: 37
1

Авторизация в WinForms, как грамотнее реализовать

24.02.2012, 17:52. Просмотров 2314. Ответов 8
Метки нет (Все метки)

Здравствуйте, дорогие форумчане. Я пишу программу с авторизацией пользователя. Когда пользователь прошёл авторизацию, я создаю объект User, Admin, которые наследуются от одного общего класса Use, но имеют различные дополнительные методы и поля.
Так вот, затем у меня открываются формы одна из другой, на подобии мастера установки. В каждое из этих окон я передаю ссылку на пользователя(User или Admin), чтобы вызывать их методы и свойства.
Вопрос, правильно ли я делаю? Или это делается по другому принципу и каждый раз ссылку на объект-пользователь передовать не обязательно? Как бы сделали вы? И как правильно с точки зрения ООП?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2012, 17:52
Ответы с готовыми решениями:

Как организовать взаимодействие между soap службой и winforms сервером
Всем привет! Есть приложение Winforms (серверное), на котором textbox, в...

Как развернуть в exe приложение WinForms
Всем доброго времени суток. Проблема, которая возможно интересует очень многих....

Вшить иконки в exe как на WinForms
Здравствуйте. Можно как-нибудь вшить иконки в exe? В Winforms можно было...

Как передать значения label WinForms в WPF textbox
Как передать значения label WinForms в WPF textbox ? Уже несколько дней мучаюсь.

Как перенести код из winforms в UWP (Universal Windows Platform)?
Делал довольно простую программу в winforms и стало интересно можно ли...

8
outoftime
║XLR8║
764 / 663 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
24.02.2012, 18:29 2
Я бы для хранения данных о пользователя использовал бы БД (SubSonic поможет если не охота писать SQL код), касательно передачи ссылки: если программой может пользоваться только 1 юзер в данный момент времени, я бы использовал паттерн синглтон (состояние программы в котором будет набор юзеров, которые залогинены и текущий юзер), и я бы не делал реализации юзеров разными (на уровне методов) проще создать
C#
1
2
3
4
5
6
7
enum Permissions 
{ 
    None,
    Guest, 
    User, 
    Admin 
}
и переопределить одну переменную
C#
1
2
3
4
5
6
7
8
9
class Person
{
    public const Permissions Permission = Permissions.None;
}
 
class Guest : Person
{
    public new const Permissions Permission = Permissions.Guest;
}
И в зависимости от прав доступа разрешать использовать тот или иной функционал.
1
sau
1994 / 1612 / 264
Регистрация: 22.07.2011
Сообщений: 6,085
Завершенные тесты: 1
24.02.2012, 18:30 3
Если варишь куриный суп то как правило наличие курицы в нем приветствуется, но с точки зрения кулинарии рецепты могут быть разные. Я бы добавил кубики кнорр ).
1
outoftime
║XLR8║
764 / 663 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
24.02.2012, 18:33 4
Запустил программу Person, пока не залогинился ничего делать не может, залогинился и уже есть какие-то права.
0
Мыслящий
1 / 1 / 2
Регистрация: 21.02.2012
Сообщений: 37
24.02.2012, 20:31  [ТС] 5
outoftime, я не делаю реализацию юзеров разными, просто у класса Use я сделал статические методы: получение строки подключения к БД, метод аутентификации, чтение основных данных из БД, а также конструктор по умолчанию, который создаёт гостя из этого класса и который может пользоваться этими методами(чтение из БД). А если пользователь есть в базе и прошёл аутентификацию, то создаю объект либо юзер, либо админ, у которых дополнительно есть свои методы, которые не совпадают. Но, за enum Permissions спасибо, буду иметь ввиду.
sau, спасибо за аналогию.
0
outoftime
║XLR8║
764 / 663 / 212
Регистрация: 25.07.2009
Сообщений: 3,320
Записей в блоге: 5
25.02.2012, 00:10 6
Мыслящий, то что ты хайдишь SQL запросы в классах это хорошо, но то что ты привязываешь их к БД это плохо! У тебя будет высокая связность классов, что чревато изменением всего проекта при изменении нескольких строк в каком-то классе.

Как вариант вынести все SQL запросы в другой класс, которому кроме запроса передавать еще и права если прав недостаточно возвращать пустую строку запроса вот и все. При вызове проверять пустая ли строка и говорить пользователю что у него недостаточно прав.
1
sau
1994 / 1612 / 264
Регистрация: 22.07.2011
Сообщений: 6,085
Завершенные тесты: 1
25.02.2012, 00:31 7
Я бы на свойства и методы обьектов , для вызова или изменения которых нужны определенные полномочия, навесил атрибуты безопастности, а проверку полномочий на соответствие атрибутам вынес бы в аспектную логику , например при помощи PostSharp-а. (дабы не развозить по всему коду)
Сами атрибуты для свойств и методов можно задавать динамически - например грузить из БД., для каждой категории классов может быть свой набор атрибутов.
На основе списка доступных атрибутов формировать различные комбинации ролей (через админку) с последующем присваиванием юзерам.
2
Мыслящий
1 / 1 / 2
Регистрация: 21.02.2012
Сообщений: 37
25.02.2012, 11:12  [ТС] 8
outoftime Спасибо, я действительно перенесу, получене строки подключения к БД в модуль БД(которую я храню в зашифрованном виде). А вот передавать права в модуль БД, я не вижу смысла, так как после авторизации у меня создаётся объект лишь с теми методами которые они могут выполнять, поэтому проверять их права в модуле БД я не вижу смысла(они просто не могут выполнить не свои методы). Ну если не считать что пользователь User не будет баловаться с SQL-инъекцией, но это уже другой вопрос.

sau, огромное спасибо, я про аспектно-ориентированное программирование даже не слышал толком!=( Сейчас изучаю его и PostSharp. Потом перечитаю твой пост дабы понять.=)

Добавлено через 1 час 5 минут
sau, ещё раз огромное спасибо за PostSharp, это действительно очень стоящее решение. Я этим непременно воспользуюсь для другого проекта, где будет много ролей и где будет админка с правами, но так как у меня здесь всего три роли(гость, пользователь и админ) думаю это будет не рационально. Но то что узнал про такую возможность, спасибо! Я читал про аутентификацию и авторизацию для WinForms, но вот на такое средство ни разу не наткнуля.
0
sau
1994 / 1612 / 264
Регистрация: 22.07.2011
Сообщений: 6,085
Завершенные тесты: 1
26.02.2012, 01:18 9
Вот еще в довесок по CAS, можно комбинировать со своей логикой, а часть доверить системе.
http://msdn.microsoft.com/ru-ru/library/dswfd229.aspx
1
26.02.2012, 01:18
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2012, 01:18

Есть ли NumericUpDown (как в WinForms) или что-нибудь аналогичное в WPF?
Здравствуйте! Нужен элемент позволяющий пробегать по ряду значений в...

Авторизация Vk. Реализовать безоконный интерфейс
Здравствуйте уважаемые форумчанины. Помогите мне с таким вопросом. ...

Как грамотнее реализовать смайлы
Привет, хочу добавить смайлы как в ВК. Отправляться на сервер будут внутри div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru