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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Права пользователя через бинарное значение 
:(
    Опции темы
Alfmaster
Дата 19.3.2009, 01:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Как лучше всего реализовать хранение прав пользователя через одно двоичное число?
PM MAIL   Вверх
Idsa
Дата 19.3.2009, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Alfmaster @  19.3.2009,  05:11 Найти цитируемый пост)
Как лучше всего реализовать хранение прав пользователя через одно двоичное число? 

Лучше всего - отказаться от идеи хранить права в виде бинарного числа. Ведь, храня права подобным образом, Вы, ограничиваете количество хранимых прав разрядностью числа.
Хотя, с другой стороны, этот метод более компактный, чем альтернативные... Но так ли это нынче важно?

Если же отвечать конкретно на поставленный вопрос... то делается это примерно следующим образом.
1. В бизнес-логике заводится enum Right, где хранятся все возможные права.
2. Создается класс RightsHelper, содержащий метод
Код

public bool HasRight(int rights, Right right)
{
if (right == right.DeleteObjects
  {
  //здесь смещаем на нужное значение rights и получаем нолик или единичку
  return Convert.ToBool(...); //под троеточикем имеется в виду тот самый нолик или единичка
  }
}


Это сообщение отредактировал(а) Idsa - 19.3.2009, 10:32


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


Опытный
**


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

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



enum + FlagsAttribute в помощь
Код

    public class User
    {
        public SecurityRole SecurityRoles
        {
            get;
            set;
        }

        public bool IsInRole(int role)
        {
            return IsInRole((SecurityRole)role);
        }

        public bool IsInRole(SecurityRole role)
        {
            return (SecurityRoles & role) != SecurityRole.None;
        }
    }

    [Flags]
    public enum SecurityRole
    {
        None = 0,
        Guest = 1,
        User = 2,
        ReportsUser = 4,
        AdvancedUser = 8,
        Administrator = 16
    }



--------------------
Все знают, что это невозможно. Но вот приходит невежда, которому это неизвестно - он-то и делает открытие. (Albert Einstein)
user posted image
PM MAIL   Вверх
Alfmaster
Дата 19.3.2009, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А если статус пользователя определяется набором прав, а не одним значением?
PM MAIL   Вверх
Idsa
Дата 19.3.2009, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Alfmaster, для этого и используется enum с атрибутом flags, как в примере 1stain

Это сообщение отредактировал(а) Idsa - 19.3.2009, 15:16


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

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

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

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


 




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


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

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