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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображать или нет конторол, в зависимости от того в какой ROLES USER 
:(
    Опции темы
Ronin08
Дата 3.2.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



Доброго времени суток!
Перед запуском Win приложения пользователь должен пройти аутентификацию. В зависимости от того в какой ROLES в базе данных (MSSQL Server) находится это USER отображать те или иные конторы или нет!
Куда копать?
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Heinzz
Дата 3.2.2010, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 9



System.Security.Principal
сне кажется можно использовать и GenericPrincipal



--------------------
user posted image
PM MAIL   Вверх
Ronin08
Дата 4.2.2010, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



как я понял классы из пространства имен
Цитата(Heinzz @  3.2.2010,  19:37 Найти цитируемый пост)
System.Security.Principal

обеспечивают безопасность на уровне учетной записи Windows, а я говорю о идентификации на уровне Пользователей которые зарегистрированы в БД, а точнее о группе пользователей (ролях).


Это сообщение отредактировал(а) Ronin08 - 4.2.2010, 14:22
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Heinzz
Дата 4.2.2010, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 9



это WindowsIdentity и WindowsPrincipal  на уровне учетных записей Windows, а ведь есть 
GenericPrincipal, GenericIdentiy, да и вообще IPrincipal и IIdentity - как раз для организации собственной аутентификации.


--------------------
user posted image
PM MAIL   Вверх
ДобренькийПапаша
Дата 4.2.2010, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Можете проверку роли перенести на сервер а не на клиент. Из клиента вызовите хранимую процедуру нужную, передав логин, который ввёл пользователь, и по нему в хранимой процедуре проверьте какой роли он принадлежит.

Это сообщение отредактировал(а) ДобренькийПапаша - 4.2.2010, 22:32


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Ronin08
Дата 4.2.2010, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



Цитата(ДобренькийПапаша @  4.2.2010,  22:32 Найти цитируемый пост)
Из клиента вызовите хранимую процедуру нужную, передав логин, который ввёл пользователь, и по нему в хранимой процедуре проверьте какой роли он принадлежит.

С этим проблем нет! Аутентификацию я сделал.
Проблема  в том как с каждой ролью из БД сопоставить отображение контролов!!!
Напомню тему: Отображать или нет конторол, в зависимости от того в какой ROLES USER
--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
ДобренькийПапаша
Дата 5.2.2010, 07:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 14.1.2006
Где: г.Москва

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



Я не знаю кошерно это или нет, но ты можешь вернуть в клиент из хранимки значение соответствующее роли (0-manager, 1-director, 2-president, 3-alien, 4-guest). И создать соответствующее перечисление в клиенте.

Код

enum Role
{
Manager=0,
Director,
President,
Alien,
Guest
}
Role role=Role.Guest;

private void SetControl()
{
    switch(role)
    {
         case Role.Guest:
         {
             myControl.Visible=false;
             myControl.Enabled=false;
         }
         //и т.д.
    }
}
 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
Ceiceron
Дата 5.2.2010, 08:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я делал подобное для веб-приложения. У меня существовал XML-конфиг, где для каждой роли описывалось, какой контрол виден и не виден. При загрузке, аутентификации пользователя, система смотрела в конфиг и по полученной роли выбирала ту часть, настроек, которая требовалась, после чего существовала всего лишь одна функция, где настройки применялись к контролам. Т.е. в коде программы не было ни каких перечислений, что давало возможность динамически создавать и регулировать роли.
В оконном приложении можно сделать также, единственное конечно придется подумать как спрятать конфиг, хотя сирриализовывать его можно бинарно, т.е. фактически можно в простом случае сделать класс, который бы  возвращал набор настроек, но лучше файл, более гибко будет. Смотрите в сторону конфигурации приложения.
PM MAIL   Вверх
Ronin08
Дата 5.2.2010, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 218
Регистрация: 16.2.2008
Где: г.Москва

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



ДобренькийПапаша, было бы логично, но не хотелось бы лезть в код после добавления новой роли!
Я еще видел вариант когда в БД записываются имена контролов которые должны скрываться для конкретного пользователя
запрос проверки типа такого:
Код

select is_member('Пользователи(просмотр)')  as tbxName
select is_member('Пользователи(просмотр)')  as tbxEmail
...

и в зависимости 0 или 1, отображать или нет!

--------------------
Зачем вставать рано или поздно? Надо вставать вовремя
PM MAIL   Вверх
Heinzz
Дата 5.2.2010, 16:37 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 5
Всего: 9



Код

            //задайте имя пользователя
            GenericIdentity id = new GenericIdentity("Vasya");
            //задайте роли пользователя
            GenericPrincipal principal = new GenericPrincipal(id,new string [] {"admin","editor","cleaner"});
            //укажите что этот поток запущен выше определенным пользователем
            Thread.CurrentPrincipal = principal;
            
            //теперь всегда можно узнать имя и какие роли есть у запустившего приложение
            if (Thread.CurrentPrincipal.IsInRole("cleaner"))
            {
                Console.Write("make control visible");
            }
            else
            {
                Console.Write("lack of privilegies");
            }

имя пусть вводит пользователь, а Вы по введенному имени запрашивайте из БД набор его ролей  и создавайте объект GenericPrincipal.
+всегда можно легко изменить набор ролей для каждого пользователя или удалить/добавить нового пользователя не внося изменения в код. Никаких cfg-шек за собой программа не тянет, а вмести с ними и проблем уязвимости безопасности. Раз уж Вам надо обращаться к БД, то и списки пользователей/ролей в ней и храните.

ps данный способ рекомендован MS так что не стоит изобретать велосипед, это надежно


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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