Распределение прав

  • Автор темы Светлана PHP
  • Дата начала

Светлана PHP

Guest
Распределение прав

В форуме искала, но не нашла.

Идея: чтобы сделать распределение прав максимально гибким имеет смысл привязать оценку доступа к методам классов.

Скажем, есть класс представления в котором есть метод вывода:
PHP:
class HTMLPageView extends something
{

...

function View(args)
{

if(!$this->IsAccessAvailable(get_class($this), __FUNCTION__))
return ACCESS_DENIED;

}


...

}
Киньте пожалуйста ссылку на систему реализующую подобный принцип... Или поделитесь мыслями. Очень надо.
 

Светлана PHP

Guest
Распределение пользовательских прав

В форуме искала, но не нашла.

Идея: чтобы сделать распределение прав максимально гибким имеет смысл привязать оценку доступа к методам классов.

Скажем, есть класс представления в котором есть метод вывода:
PHP:
class HTMLPageView extends something
{

...

function View(args)
{

if(!$this->IsAccessAvailable(get_classname($this), __FUNCTION__))
return ACCESS_DENIED;

}


...

}
Киньте пожалуйста ссылку на систему реализующую подобный принцип... Или поделитесь мыслями. Очень надо.
 

icechel

Новичок
Вообще система распределния прав примерно называлась GACL
Мона поискать в яндексе или в гугле.
А дальше уже плясать от нее.
 

Светлана PHP

Guest
Для настоящей гибкости в управлении не хватает рассмотрения ACO (объектов доступа), как активных. Скажем, существует возможность DENIED всех одним кликом, вместо пересмотра дерева ARO.
К тому же я не понимаю, почему ACO так урезаны - почему их не соподчинили в иерархию - это, как минимум, повысило бы скорость этой бадяги в раз 10, не говоря о гибкости.
 

Светлана PHP

Guest
К тому же довольно часто стоит задача ограничить в сути которой, стоит рассмотрение ARO, с точки зрения определённого IP.
Не не катит CALC

-~{}~ 17.04.05 18:01:

Монускрипт прочла. Вот логику, алгоритмы не отрыла на Вашем web-сайте...

А так... написано классно. Слог неплохой. Всё пронумеровано. Ссылочки. Да. Хорошо.

Киньте ссылку на алгоритмы и логику, пожалуйста.
 

tristram

Guest
Светлана PHP
я думаю проще сделать самописную систему т.к. чужую долго доводить до ума.
 

Светлана PHP

Guest
ну самое ценное не код, а идея... поэтому от алгоритма ПОПОВА не отказалась бы ознакомиться...
 

Светлана PHP

Guest
Эту ссылку надо бы где-нибудь повыше пихать. Полезная.
А вот схемы алгоритма... чертежи, алгоритмы там... нет?

А то я посмотрела, а там процедурами всё. Ни хера не понять.
 

Popoff

popoff.donetsk.ua
Нет, рисовать я не люблю :) Если что-то не понятно, задавай вопросы.
 

Светлана PHP

Guest
Ну хотябы как в GACL.
Как реализована? Алгоритмы? Логика? Какие там таблицы? Чего куда?
 

Popoff

popoff.donetsk.ua
Берем исходный код и смотрим: там есть и реализация, и алгоритмы, и скрипт для создания таблиц. Логика, имхо, уже описана; если что-то, на Ваш взгляд, не хватает по логике - спрашивайте, буду рад добавить. Буду так же рад описать для Вас ВСЕ, с картинками, таблицами и прочими прибамбасами за WMZ. Бесплатно же я с удовольствием отвечу на более конкретные вопросы. :)
 

Светлана PHP

Guest
Старина. Там процедурами, даже без namespacoff Ты её сделал для себя. Вряд ли кто-то захочет врубаться в код.

Нет так нет.
 

Kelkos

Сам себе программер
Автор оригинала: Светлана PHP
Старина. Там процедурами, даже без namespacoff Ты её сделал для себя. Вряд ли кто-то захочет врубаться в код.

Нет так нет.
И откуда ты такая нарисовалась?
Светлана, всё дело в том, что абсолютно универсального метода нет. И каждый реализует "кто во что горазд" именно под свою CMS (а именно для своей CMS-ки ты делаешь распределённый доступ, как я понял.).
Может люди тебе ещё и рассказали бы о своих методах, но после твоих просьб "покажите, пожалуста.." и потом "Старина. Там процедурами, даже без namespacoff" наврятли кто то захочет тебе помочь конкретным кодом и методами. Отбило всё желание.
 

Alexandre

PHPПенсионер
Светлана в моей CMS реализована подобная система, но пока нет админки управленя интерфейсом доступа. Идея в следующем:

есть некий конфиг, который описывает систему прав. Пример части конфига:
PHP:
<config>
        <defaultModel name="login" action="execModel" />
        <!--defaultModel Модель по умолчанию, т.е. если не задано $_REQUEST[do]
            name - имя модели
            action - значение actionName дефаултовой [name] модели.
               -->

        <formAction page="login"  default="1" model="login"  method="execModel"   >
                <!-- -не указана роль  доступ всем -->
                <View code="0" name="login" method="show"  DataSetName="" template="login" />
        </formAction>

        <formAction page="goods" actionName="list" model="good" method="viewAll">
                <role>user</role>
                <role>admin</role>
                <View code="0" DataSetName="goods" method="viewAll" template="goods_list" />
                <View code="1" DataSetName="sec" template="sec" />
        </formAction>
...
конфиг в админки парситься в массив (в php код), правда я
видел реализацию, что партится в в сецифичный набор классов.
получется что-то типа:
PHP:
<?
$config = array();
$view = array();
$role = array();
       
$role[] = 'user';
$role[] = 'admin';
$role[] = 'anonymous';
        
$view['0'] = array(
        'code' => '0',
        'name' =>  'login',
        'method' => 'show',
        'template' => 'login',
        );
....
можно использовать сакс, но это не принципиально...

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

при желании могу выслать код, но тогда все классы модели должны быть потомками от базового класса :)

идея ясна?
 

Светлана PHP

Guest
Alexandre, чего-то не совсем. Так... давай по полочкам: запускается некий класс логики, допустим он стартует с некоторого метода Start.
Start в зависимости от запроса пользователя(для простоты, далее, админа) выполняет различные ветки методов. Пошла ветка ShowAllSystemUsers (допустим, это происходит в модуле, который контролирует создание системных пользователей).
Прежде чем ShowAllSystemUsers приступит к исполнению запускается некая функция IsAccessAvailable()... Которая... Вот дальше твой конфиг парсится должно быть... и чего там к чему?
 
Сверху