от
Я часто сталкиваюсь с Следующий сценарий, где я должен предложить много различных типов разрешений. Я в первую очередь использовать ASP.NET / VB.NET с SQL сервером 2000. Сценарий Я хочу предложить динамическую систему разрешений, которые могут работать по разным параметрам. Допустим, что я хочу дать либо отдела или конкретного человека доступа к приложению. И делать вид, что у нас есть ряд приложений, которые постоянно растут. В прошлом, я выбрал один из следующих двух способов, которые я знаю, чтобы сделать это. Использовать одну таблицу с разрешения специальных столбцов, которые используются для определение как применить параметры. Специальный колонок в этот пример typeid и TypeAuxID. Для SQL будет выглядеть примерно как это.
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
Используйте таблицу сопоставления для каждого типа разрешения, а затем присоединиться к ним все вместе.
SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE q.SectionID=@SectionID
  AND (emp.UserID=@UserID OR dept.DeptID=@DeptID OR
 (emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC
Мои Мысли Я надеюсь, что эти примеры имеют смысл. Я починил их вместе. Первый пример требует меньше работы, но ни один из них не чувствовали себя, как лучший ответ. Есть ли лучший способ справиться с этим?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

6 Ответы

0 голосов
от
Я часто сталкиваюсь с Следующий сценарий, где я должен предложить много различных типов разрешений. Я в первую очередь использовать ASP.NET / VB.NET с SQL сервером 2000. Сценарий Я хочу предложить динамическую систему разрешений, которые могут работать по разным параметрам. Допустим, что я хочу дать либо отдела или конкретного человека доступа к приложению. И делать вид, что у нас есть ряд приложений, которые постоянно растут. В прошлом, я выбрал один из следующих двух способов, которые я знаю, чтобы сделать это. Использовать одну таблицу с разрешения специальных столбцов, которые используются для определение как применить параметры. Специальный колонок в этот пример typeid и TypeAuxID. Для SQL будет выглядеть примерно как это.
SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1
Используйте таблицу сопоставления для каждого типа разрешения, а затем присоединиться к ним все вместе.
SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE q.SectionID=@SectionID
  AND (emp.UserID=@UserID OR dept.DeptID=@DeptID OR
 (emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC
Мои Мысли Я надеюсь, что эти примеры имеют смысл. Я починил их вместе. Первый пример требует меньше работы, но ни один из них не чувствовали себя, как лучший ответ. Есть ли лучший способ справиться с этим?
0 голосов
от
Я согласен с Джоном Дауни. Лично я иногда использую отмеченное перечисление разрешений. Таким образом, вы можете использовать И, ИЛИ, НЕ и исключающее ИЛИ побитовые операции на элементы перечисления.
"[Flags]
public enum Permission
{
    VIEWUSERS = 1, // 2^0 // 0000 0001
    EDITUSERS = 2, // 2^1 // 0000 0010
    VIEWPRODUCTS = 4, // 2^2 // 0000 0100
    EDITPRODUCTS = 8, // 2^3 // 0000 1000
    VIEWCLIENTS = 16, // 2^4 // 0001 0000
    EDITCLIENTS = 32, // 2^5 // 0010 0000
    DELETECLIENTS = 64, // 2^6 // 0100 0000
}"
Затем вы можете объединить несколько разрешений, используя оператор and побитовый. Например, если пользователь может просматривать
0 голосов
от
Я обычно идти о системах кодирования разрешение, имеющее 6 столов. Пользователи - это довольно прямо вперед, это ваш типичный пользователи стол Группы - это будет синонимом вашего ведомства Роли - это таблица со всеми разрешениями как правило, в том числе удобочитаемое имя и описание Users_have_Groups - это многие-ко-многим таблице, к какой группе принадлежит пользователь Users_have_Roles - еще многие-ко-многим таблица, какие роли назначены пользователю Groups_have_Roles - финал многие-ко-многим таблица, какие роли каждой группы В начале сессии пользователей, можно запустить какую-то логику, которая вытаскивает каждую роль, которую они назначили, либо каталог, либо через группу. Затем вы код от этих ролей в качестве вашего разрешения. Как я сказал, это то, что я обычно делаю, но ваш пробег может варьироваться.
0 голосов
от
В дополнение к Джон Дауни и jdecuyper решения, я также добавил "запретить" бит в конце/начале битами, так что вы можете проанализировать добавки разрешения группы, членство в роли, а затем вычесть разрешений, основанных на явный запрет записи, так же, как с NTFS работает, разрешение-мудрый.
0 голосов
от
Честно членство ASP.NET / роли функции будет работать идеально для описанного вами сценария. Написание собственных таблиц / процедур / классов-это отличное упражнение, и вы можете получить очень хороший контроль за подробности, но после этого я пришел к выводу, что лучше всего использовать встроенную .Чистые вещи. Много существующего кода предназначен для работы вокруг него, что хорошо на хорошо. Писать с нуля у меня ушло около 2 недель, и это было не где рядом столь же надежен, как .Сетей. У вас в коде столько дерьма (восстановление пароля, автоматическая блокировка, шифрование, функции, интерфейс, разрешение, куча проков и т. д.) и время может быть лучше потратить в другом месте. Извините, если я не отвечу на твой вопрос, мне нравится парень, который говорит, что выучить C#, когда кто-то задает вопрос глаг.
0 голосов
от
Подход я использовал в различных приложениях-это универсальный класс PermissionToken, который имеет сменные стоимости имущества. Затем запросить запрошенное приложение, оно говорит вам, что PermissionTokens нужны для того, чтобы использовать его. Например, приложения доставка может сказать вам, он должен:
new PermissionToken()
{
    Target = PermissionTokenTarget.Application,
    Action = PermissionTokenAction.View,
    Value = "ShippingApp"
};
Это, очевидно, может быть расширен, чтобы создать, редактировать, удалить и т. д. и, из-за свойства значение любое приложение, модуль или виджет может определить свои собственные разрешения. YMMV, но это всегда был эффективный способ для меня, который я нашел, чтобы хорошо.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...