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

Поиск:

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


Команда REDSTUFF
**


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

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



Есть БД с таблицей users. На форме: txtLogin, txtPassword, btnLogin, btnRegistration (при нажатии на btnRegistration появляются: txtFName, txtLName, txtPhone, btnSend)
Код

USE [RegHardware]
GO
/****** Object:  Table [dbo].[Users]    Script Date: 08/14/2007 14:03:58 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Users](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [Login] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [Password] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [FName] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [LName] [nvarchar](20) COLLATE Cyrillic_General_CI_AS NOT NULL,
    [Phone] [nchar](10) COLLATE Cyrillic_General_CI_AS NULL,
    [RAdmin] [bit] NOT NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
USE [RegHardware]
GO
ALTER TABLE [dbo].[Users]  WITH CHECK ADD  CONSTRAINT [CK_Phone] CHECK  (([phone] like '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'))
GO
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'Check for valid phone' ,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'TABLE', @level1name=N'Users', @level2type=N'CONSTRAINT', @level2name=N'CK_Phone'

Самому первому зарегистрировавшемуся пользователю присвоить все права (RAdmin = true) остальным присваивать (RAdmin = false)
Потом первый пользователь сможет принимать решения кому назначать еще права администратора.

Пользователям нельзя редактировать и недоступны некоторые функции программы (назначение прав...)

С вашей помощью хочеться реализовать такое.


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


Эксперт
****


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

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



А в чём, собственно, проблема?
PM   Вверх
Redstuff
Дата 14.8.2007, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Exception, хочеться реализовать так, чтобы было универсально и граммотно.

Чтобы присвоить права только первому пользователю как лучше поступить? Сделать проверку на значение в БД и если такое есть то присваивать только RAdmin = false?


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


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 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 -- готовая программа-пример.
PM   Вверх
Redstuff
Дата 14.8.2007, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Вот что пока получается:
Код

private void btnSend_Click(object sender, EventArgs e)
        {
            // Select
            SqlCommand cmdS = new SqlCommand("SELECT * FROM Users", con);
            cmdS.CommandType = CommandType.Text;
            // Insert
            SqlCommand cmdI = new SqlCommand("INSERT INTO Users(ID, Login, Password, FName, LName, Phone, RAdmin)" +
                "VALUES(@ID, @Login, @Password, @FName, @LName, @Phone, @RAdmin)", con);
            cmdI.CommandType = CommandType.Text;
            da.InsertCommand = cmdI;
            // Delete
            SqlCommand cmdD = new SqlCommand("DELETE FROM Users WHERE ID=@ID", con);
            cmdD.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0,
                "ID", DataRowVersion.Original, null));
            //da.DeleteCommand = cmdD;
            // Update
            SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);
            cmdU.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, "ID"));
            cmdU.Parameters.Add(new SqlParameter("@Original_ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0, "ID", DataRowVersion.Original, null));
            //da.UpdateCommand = cmdU;
            da.SelectCommand = cmdS;
            // Заполнение объекта dataset
            da.Fill(ds, "Users");

            // Сколько строк в первой таблице
            int strTab = ds.Tables[0].Rows.Count;
            // Создание новой строки
            DataRow dr = ds.Tables[0].NewRow();
            // Заполнение новой строки данными
            dr[0] = 1;
            dr[1] = txtLogin.Text;
            dr[2] = txtPassword.Text;
            dr[3] = txtFName.Text;
            dr[4] = txtLName.Text;
            dr[5] = txtPhone.Text;
            if (strTab > 0)
                dr[6] = false;
            else dr[6] = true;
            // Добавление новой строки в таблицу
            ds.Tables[0].Rows.Add(dr);
            da.Update(ds, "Users");
        }


Ошибка: Must declare the scalar variable "@ID"

Добавлено через 2 минуты и 11 секунд
Пока писал сообщение даж не заметил, Exception, спасибо за примеры буду разбираться с ними тоже)


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


Эксперт
****


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

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



Наверное, ты имел в виду "WHERE ID = @Original_ID" smile .
PM   Вверх
Redstuff
Дата 14.8.2007, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Exception, если честно то не могу понять где ошибка все-равно  smile 
ID (is identity = true, и Primery key)

Код

// Update
            SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);
            cmdU.Parameters.Add(new SqlParameter("@ID", SqlDbType.Int, 1, "ID"));
            cmdU.Parameters.Add(new SqlParameter("@Original_ID", SqlDbType.Int, 1, ParameterDirection.Input, false, 0, 0, "ID", DataRowVersion.Original, null));
            //da.UpdateCommand = cmdU;


Сделал проверку, заполнил датасет и вывел его в датагрид все ок!
Но вот обновить БД не получается(((

Код взят из книги Майк Гандерлой, Джозеф Джорден, ... SQL Server 2005
Если можно, объясните плиз как лучше через код использовать эти все команды и чутка комментарий к строчкам)... а то авторы книги, на комментарии к коду, времени не тратили ((

Добавлено через 3 минуты и 36 секунд
Еще куда фак пропал? там была хорошая статья про SQL запросы, мне бы она сейчас очень пригодилась  smile 


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


Команда REDSTUFF
**


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

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



Код

cmdI.Parameters.Add("@ID", SqlDbType.Int);
            cmdI.Parameters["@ID"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@ID"].Value = strTab + 1;

            cmdI.Parameters.Add("@Login", SqlDbType.NVarChar);
            cmdI.Parameters["@Login"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Login"].Value = txtLogin.Text;

            cmdI.Parameters.Add("@Password", SqlDbType.NVarChar);
            cmdI.Parameters["@Password"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Password"].Value = txtPassword.Text;

            cmdI.Parameters.Add("@FName", SqlDbType.NVarChar);
            cmdI.Parameters["@FName"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@FName"].Value = txtFName.Text;

            cmdI.Parameters.Add("@LName", SqlDbType.NVarChar);
            cmdI.Parameters["@LName"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@LName"].Value = txtLName.Text;

            cmdI.Parameters.Add("@Phone", SqlDbType.NChar);
            cmdI.Parameters["@Phone"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@Phone"].Value = txtPhone.Text;

            cmdI.Parameters.Add("@RAdmin", SqlDbType.Bit);
            cmdI.Parameters["@RAdmin"].Direction = ParameterDirection.Input;
            cmdI.Parameters["@RAdmin"].Value = true;

Обновилась после добавления всего этого...
Проще можно решение?


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


Эксперт
***


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

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



Цитата(Redstuff @  14.8.2007,  19:07 Найти цитируемый пост)
Exception, если честно то не могу понять где ошибка все-равно
тебе же Exception, написал, у тебя синтаксическая ошибка в строке запроса

вместо
Код

SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=Original_ID", con);


нужно
Код

SqlCommand cmdU = new SqlCommand("UPDATE Users SET ID=@ID WHERE ID=@Original_ID", con);





--------------------
На хорошей работе и сны хорошие снятся.
PM MAIL   Вверх
Redstuff
Дата 14.8.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



tol05, я уже так пробовал, не помогает... таже ошибка ((
Ошибка: Must declare the scalar variable "@ID"



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


Эксперт
****


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

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



Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
ol05, я уже так пробовал, не помогает... таже ошибка ((

У тебя, видимо, не одна ошибка. Верни @ на место smile

Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
Ошибка: Must declare the scalar variable "@ID"

В какой строчке?

P. S. А ты какую СУБД используешь?


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


Команда REDSTUFF
**


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

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



Idsa, в стр 41
Код

  da.Update(ds, "Users");


MS SQL Server 2005


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


Эксперт
****


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

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



Цитата(Redstuff @  14.8.2007,  21:21 Найти цитируемый пост)
Ошибка: Must declare the scalar variable "@ID"

Так ты же добавляешь параметры, а значения им не присваиваешь.
Кроме того, int весит 4 байта, а не 1. Да и вообще, размер для int указывать не нужно.
Для добавления параметров тебе следует использовать, например, следующий код:
Код

            SqlCommand command = new SqlCommand();
            SqlParameter idParameter = new SqlParameter("@ID", SqlDbType.Int);
            idParameter.Value = /*здесь присваиваешь значение*/;
            command.Parameters.Add(idParameter);

В случае использования int можно забить на size (для varchar так лучше не делать), да и тип автоматически определится, поэтому можно использовать короткую запись:
Код

            SqlCommand command = new SqlCommand();
            command.Parameters.AddWithValue("@ID", /*здесь присваиваешь значение*/);



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


Команда REDSTUFF
**


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

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



Все теперь понятно почему ошибка. Намудрил кучу всего лишнего, датасет зачем-то привизал.

Idsa, спасибо! буду знать на счет типа.
Цитата

Самому первому зарегистрировавшемуся пользователю присвоить все права (RAdmin = true) остальным присваивать (RAdmin = false)

С этим разобрался!

Теперь необходимо проверить есть ли такой пользователь в БД и какие у него права. Если все ок, то открыть следующую форму с наличием на ней того функционала который полагается пользователю с его правами.

Как осуществить проверку?
Есть только одна мысль - сравнить txtLogin со столбцом Login, если нашел запомнить номер ID/строки и сверить пароль находящийся там с txtPassword.


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


Эксперт
****


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

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



Цитата(Redstuff @  15.8.2007,  17:46 Найти цитируемый пост)
Есть только одна мысль - сравнить txtLogin со столбцом Login, если нашел запомнить номер ID/строки и сверить пароль находящийся там с txtPassword. 

Зачем искать ID?
Нужно составить запрос, например, такой:
Код

SELECT RAdmin FROM Users WHERE Login = @login AND Password = @password

Параметрам login и password присвоить значения txtLogin и txtPassword соответственно.
После выполнения ExecuteReader() проверить: если reader.HasRows == false, выдать MessageBox с сообщением "Неверный логин или пароль", иначе выполнить reader.Read() и проверить reader["RAdmin"]. Ну а дальше уже реализуй логику своего приложения.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
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   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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