парсинг контроллера для получения методов и дополнительного кода / переменной

0

Я написал короткий скрипт, который сканирует application/controllers и вставляет имена контроллеров и методов в БД. Это часть модуля ACL, который позволяет мне предоставлять разрешения пользователям.

Я получаю методы со следующей функцией -

$classname = ucfirst(substr($filename, 0, strrpos($filename, '.')));
$methods = get_class_methods($classname); 

После обработки я получаю следующий массив

Array
(
    [0] => Array
        (
            [controller] => Inbox
            [method] => index
        )

    [1] => Array
        (
            [controller] => Inbox
            [method] => read
        )

    [2] => Array
        (
            [controller] => Inbox
            [method] => write
        )
)

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

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

пример

function read(){
//Desc:Reads a message.
//Unique method ID:2
...
}

и вставленный массив будет чем-то вроде

Array
    (
        [0] => Array
            (
                [id] => 1
                [desc] => nothing to do here
                [controller] => Inbox
                [method] => index
            )

        [1] => Array
            (
                [id] => 2
                [desc] => read a message
                [controller] => Inbox
                [method] => read
            )

        [2] => Array
            (
                [id] => 3
                [desc] => send a message
                [controller] => Inbox
                [method] => write
            )
    )
Теги:
codeigniter
parsing
codeigniter-2

1 ответ

1

Почему бы не сделать первичный ключ для таблицы ACL slug, сгенерированный из имени класса и метода, вместо целого?
Таким образом, это не изменит ситуацию, когда вы добавите новые контроллеры/методы.

Очень простой пример таблиц;
действия

-----------------------------------
| id         | controller | method|
|---------------------------------|
| inbox_read | Inbox      | read  |

ACL

-----------------------
|user_id | acl_slug   |    
|--------|------------|
|  1     | inbox_read |

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

foreach ($method_array as $action) {
    $slug = strtolower(implode('_', $action));
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню