Лучший способ разработать приложение - PullRequest
0 голосов
/ 08 июня 2011

У меня есть приложение с несколькими пользователями с разными ролями. Доступ каждого пользователя к ресурсу ограничен его ролью.

Теперь, если я создаю приложение для управления этими ресурсами, как мне структурировать свое приложение.

роли: администратор, модератор, автор ресурсы: статьи

Я вижу два варианта.

1: создание отдельных модулей для каждой роли с предоставлением доступа к ресурсам для роли например: админ / -добавить / редактировать / удалить статью -добавить / отредактировать / удалить пользователя автор / -добавить / редактировать / удалять собственные статьи Модератор/ статьи

2: Создать отдельные модули для каждого ресурса и предоставить доступ к ним в зависимости от роли пользователя, который к ним обращается. например:
статьи / добавить / редактировать / удалить [управлять операциями в зависимости от роли пользователя]

Язык - PHP, и я буду использовать Zend Framework. Моя проблема не в правах доступа, поскольку об этом заботится компонент ACL Zend. Моя проблема связана с организацией приложения.

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

Очевидно, что первый подход будет включать больше файлов и менее сложную логику Второй подход потребует более сложной логики, но я просто не уверен, какой из них следовать, и ищу совета. Любая помощь приветствуется.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Я думаю, что общий подход состоял бы в том, чтобы сохранить логику доступа с доступным ресурсом, а не с доступом к нему.

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

Вся логика будет выглядеть примерно так:

if user is article.owner or admin
    ...make things happen

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

0 голосов
/ 08 июня 2011

Это действительно зависит от того, на каком языке / платформе вы все строите. Большинство платформ уже имеют встроенную поддержку безопасности.

Этот ответ предназначен для .NET.

Ничего особенного не делайте.Используйте встроенную модель безопасности (CAS = Code Access Security).

Вы можете ограничить доступ к методам, используя определенные атрибуты.Если вы создаете приложение MVC, вы можете использовать атрибут [Authorize], в то время как в обычных приложениях вы можете использовать [PrinicpalPermission].

. Чтобы заставить его работать, вам нужно назначить принципала для всех работающих потоков (System.Threading.Thread.CurrentPrincipal = new MyPrincipal(myUserInfo)).

ASP.NET делает это автоматически, и другие приложения по умолчанию используют текущего вошедшего в систему пользователя (windows).

...