NullPointerException
s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException
. Они наиболее распространены, но другие способы перечислены на странице NullPointerException
javadoc.
Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException
, be:
public class Example {
public static void main(String[] args) {
Object obj = null;
obj.hashCode();
}
}
В первой строке внутри main
я явно устанавливаю ссылку Object
obj
равной null
. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException
, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.
(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)
Brandon Savage дал представление своего пакета PHP" ApplicationACL", который может или не может выполнить основанный на роли доступ. PHPGACL мог бы работать также, но я не могу сказать Вам наверняка.
, Что я могу сказать, Вы, однако, , компонент Zend_ACL Платформы Зенда сделает основанные на роли установки (однако, необходимо будет разделить на подклассы для проверки нескольких ролей сразу). Предоставленный боль этого, необходимо будет вытащить Zend_ACL, я не полагаю, что это имеет любые внешние зависимости от монолитной загрузки (или контроль SVN).
хорошая вещь о Zend_ACL состоит в том хотя ее агностик устройства хранения данных. Можно или восстановить его каждый раз, когда или это разработано, чтобы быть сериализированным (я использую комбинацию обоих, сериализирую для кэша и восстанавливаю от DB).
Возможно, я неправильно понимаю вопрос, но не являюсь смыслом Основанного на роли управления доступом (RBAC) к , избегают Списки управления доступом (ACLs)?
RBAC отличается от списков управления доступом (ACLs) (...), в котором это присваивает полномочия определенным операциям со значением в организации, а не к низкоуровневым объектам данных. Например, список управления доступом мог использоваться, чтобы предоставить или отклонить доступ для записи к конкретному системному файлу, но это не скажет в том, какие способы, которыми мог быть изменен файл. В основанной на RBAC системе операция могла бы быть должна создать транзакцию 'кредитового счета' в финансовом приложении (...). Присвоение разрешения выполнить конкретную операцию значимо, потому что операции являются мелкомодульными, и они имеют значение в рамках приложения. (Кавычка: Википедия )
я не знаю специфических особенностей Zend_ACL или других упомянутых реализаций, но если бы они основаны на ACL, я не рекомендовал бы использовать их для основанной на роли авторизации.
phpgacl http://phpgacl.sourceforge.net/ является базирующейся платформой управления доступом универсального acl
, в то время как я не знаю ни о каком CI определенную реализацию, я знаю, что Вам только нужен основной файл класса, чтобы заставить phpgacl работать. Так я живо, что интеграция с CI не будет никакой проблемой. (У меня есть работа мимоходом с CI)
Узнанный о ACL Khaos, который является библиотекой CI... Я также проверяю phpgacl и как использовать его для CI... Have'nt проверил ACL Зенда все же. Но возможно это может быть "портировано" к CI
Попробуйте плагин DX_Auth для CodeIgniter. Я работаю над подобным (скорее, надмножеством) функций, которые есть у DX_Auth. Мой набор надстроек CI включает отображение меню (которым можно управлять через CSS), контроль доступа на основе ролей перед вызовом контроллера и другие функции. Надеюсь вскоре опубликовать. Когда я сделаю это, я предоставлю URL проекта
RBAC! = ACL - У Roland есть единственный правильный ответ на этот вопрос.
Кстати, конечно, это важная часть инфраструктуры для реализации любой системы разрешений - по крайней мере, нет смысла использовать структуру, если она не дает вам хорошо спроектированной системы RBAC - может быть, лучше использовать тогда будет простая система шаблонов с любым слоем ORM.
Это общий антипаттерн в мире php, что фреймворки вроде Ruby или Django «клонируются» только как подмножество того, что предоставляют эти современные фреймворки - как типичный синдром, который вы видите отсутствие хорошей интеграции ACL или RBAC в эти фреймворки - что по сути является шуткой. В настоящее время существует только PHP-фреймворк Yii с достойной реализацией RBAC.
http://www.jframework.info (мертвая ссылка)
jFramework имеет стандартный RBAC уровня 2 NIST с улучшениями, который считается самым быстрым из доступных (включая тесты производительности) он может работать с одним файлом базы данных SQLite и тщательно протестирован, работает как перчатка.
Имеет зависимость от jFramework DBAL, но вы можете просто заменить DBAL SQL Queries в коде на желаемый DBAL и, конечно же, вы можете использовать jFramework как SOP.