Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разрешение пользовотелям на те или иные действия, Общий вопрос 
:(
    Опции темы
DeamonShan
Дата 6.9.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть ядро (самописный) он взаимодействует с модулями. Каждый модуль имеет конфигурацию (точнее должен иметь) для ограничений тех или иных действий пользователю, действия настраиваютс в админке.

Суть: Админ добавляет пользователя и выставляет права на те или иные действия. Например, если модуль добавления, редактирования и удаления товара, то у него должны быть соответсвующие настройки на эти действия (добавление, реддактирование, удаление), которые нужно как-то связать с пользователями.

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

И собственно хотелось бы с вами посоветоваться, как лучше это дело организовать? Желательно, чтобы модуль устанавливался не через вдминку, а простым копированием файлов модулей. Мне главное понять суть и структуру этих действий.
PM MAIL   Вверх
Muerto
Дата 6.9.2010, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Я представляю себе это так:

Для каждого пользователя есть массив, 'read'=> 0/1 'write=> 0/1 и тп.
Как мы будем хранить этот массив, можно в одной ячейки через сериализацию в базу, а можно отдельные ячейки в базе...
А можно просто создать должности, и создать функцию которая будет создавать массив прав в зависимости от должностей, будь то модератор, админ, пауер юзер, новичек, бывалый и тп

И дальше в каждом методе смотрим на массив прав, и если он соответсвует правам , то выполняем, а нет так нет

Можно что бы базу не грузить должность в сессии хранить

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


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


Опытный
**


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

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



Muerto, никаких должностей и групп не будет.

Права доступа пользователям нужно указывать сразу при добавлении пользователя в систему.  Массив с правами пользователя сериализировать и хранить в базе.


Главное понять, как модули с этим связать...
PM MAIL   Вверх
Muerto
Дата 6.9.2010, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



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


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


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



DeamonShan, Нужно делать операцию "установки модуля в систему" и "удаление модуля из системы". 
Вероятнее всего - отдельные методы включаемого в систему модуля. Хотя отдельный файл для установки позволит немного сэкономить на коде. Эта операция будет модифицировать конфигурационные файлы. К примеру в списке прав пользователя, который должен храниться в файле конфигурации, могут быть добавлены-исключены некоторые значения.
Для пущей скорости работы файл конфигурации можно генерировать как php файл , состоящий из комплекта массивов-констант. Значения туда можно сбрасывать var_export. Главное не делать это очень часто  smile Все-таки это не база данных.

при добавлении нового комплекта прав нужно прописать устанавливаемые дефолтные значения для стандартных групп "Admins", "Users" и "Guests".


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
DeamonShan
Дата 6.9.2010, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А в самом моддуле, if(){} -ми организовать эти ограничения? или как-то в клссами можно как то по другому, чтобы многократных ифофо не было?
PM MAIL   Вверх
ksnk
Дата 6.9.2010, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Тут, видимо, конфликт конкретных решений ;)

Интерфейс работы с правами можно делать примерно так
Код

class user {
   public function rights($s){...}
}

права не ограничены типом. могут быть логическими или строковыми. Строковые типы - выбор из списка значений.

тогда в модуле (module_XXX) можно написать
Код

 if(!$user->Right('module_XXX.canread')) return 'have no right, sorry :(';
 if($user->Right('module_XXX.form')=='form1') // вывод формы form1

префикс module_XXX. в начале имени права исключительно для того, чтобы не путаться в разномодульных read и write...
вот эту строчку с индексом "права" - module_XXX.form должен знать сервис, который выводит форму редактирвоания списка прав. Ее должен знать сервис, который заведывает сохранением и восстановлением прав в базе данных. imho, проще портировать ее в общий конфигурационный файл. 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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