Как разобраться в иерархической системе RBAC

Оригинал: Getting to Understand Hierarchical RBAC Scheme

Authentication and Authorization — это хороший учебник, в котором, помимо прочих тем, описываются основные аспекты реализации иерархической системы RBAC в Yii. Но сколько я ни читал этот толковый учебник, я не мог понять, как именно работает иерархия. Я нашел, как определить авторизацию иерархии, как оцениваются правила управления, как настраивается authManager, но почти ничего не обнаружил о том, как строить свою иерархию, в какой последовательности проверяются ее узлы, когда проверка останавливается, и каков будет результат проверки.

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

Я должен сказать, что понять смысл статьи было бы намного проще, если бы вы ознакомились с вышеупомянутым учебником. Особенно начиная с темы Role-Based Access Control.
Давайте рассмотрим пример иерархии, который приведен в учебнике (здесь показано, как система безопасности может быть построена для некоторых блогов):

Читать дальше →

Руководство для проектирования хорошей схемы базы данных

Оригинал: Guidelines for good schema design

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

Первый и наиболее важный момент заключается том, что Yii-приложения широко
используют шаблон ActiveRecord. Исходя из этого, все конструктивные соображения
направлены на оптимизацию такого использования, а не на человека, который будет
составлять сложные SQL-запросы. В самом деле, многие из проектных решений напрямую
конфликтуют с передовой практикой для создания дружественных SQL-схем.

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

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

Согласованность играет очень большую роль.

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

Читать дальше →

Создание своего правила валидации (validation rule)

Оригинал: Create your own Validation Rule

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

Быстрый способ

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

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

Прежде всего в вашем классе модели вам придется добавить две константы:
const WEAK = 0;
const STRONG = 1;


Читать дальше →

Ajenti, или как я панель выбирал

Хочу рассказать, про небольшую находку, которая мне попалась на днях. Все началось с того, что админы на работе решили, что под каждый проект, будет отдельная виртуалка с линуксом. Сказано, сделано. Но управлять десятками разных осей через ssh та ещё задачка. Посему, было решено ставить на линукса панель управления аля isp или cpanel. Естественно главный критерий отбора была стоимость решения. Платные панели сразу отмели, т.к. покупать лицензию для каждой версии панели не целесообразно. Из весплатных было найдено не много достойных решений. Но одно все же смогло зацепить. Встречайте, Ajenti.

Под катом ещё информация и Скриншоты.

Поиск и сортировка связанных моделей в CGridView

Оригинал — Searching and sorting by related model in CGridView

Допустим, у нас есть две модели и отношения между ними:
class Author extends CActiveRecord {
...
}
 
class Post extends CActiveRecord {
...
    function relations() {
        return array(
            'author'=>array( self::BELONGS_TO, 'Author', 'id_author' ),
        );
    }
...
}
в списке сообщений, вы хотели бы показать имя автора в колонке, позволить сортировать по этой колонке и, вероятно, дать возможность отфильтровать по подстроке имени автора. Лучшее решение (на мой взгляд), чтобы обеспечить все эти возможности:

Читать дальше →

Правило валидации "safe", для тех, кто в танке

Оригинал — Understanding «Safe» Validation Rules

Вступление

Зачастую, начинающие Yii программисты, непонимают для чего нужно правило валидации «safe». Эта статья должна прояснить путанницу, и заодно объяснить, что такое саммовое присваивание.

Вкраце. Правила валидации служит двум целям:
  1. Убедиться, что данные переданные через форму, введены корректно.
  2. Определить, какие поля могут быть назначены переменной $model.
Они связанны, но она не являются одним и тем же.

Взглянем на набор правил проверки

Перед тем, как начать работу, мы продемонстрируем Вам типовые правила проверки данных модели. Наш пример взят из блога Tutorial. Модель «User» находится в protected/models/User.php.
// protected/models/User.php
    ...
    public function rules()
    {
        return array(
            array('username, password, salt, email', 'required'),
            array('username, password, salt, email', 'length', 'max'=>128),
            array('profile', 'safe'),
        );
    }

Правила проверки определяются из массива array(...). Содержит список атрибутов, имя валидатора, а также дополнительные параметры, необходимые различным валидаторам. Также может содержать ключевое слово «on», указывающее сценарий валидации, но мы не будем описывать это в статье.

Читать дальше →

Использование класса CButtonColumn для изменения кнопок в виджете CGridView

Оригинал: Using CButtonColumn to customize buttons in CGridView

Вступление

CGridView является одним из наиболее гибких виджетов в Yii и примером такой гибкости является класс CButtonColumn. Он используется для создания кнопок для управления моделью в каждой строке таблицы. В этой инструкции мы объясним способы, которыми пользователь может настроить CButtonColumn для своих потребностей.

Читать дальше →

Создание ssh ключа в linux

SSH ключи сейчас используются повсеместно. Это лучший, в плане безопасности, способ авторизации на текущий момент. Авторизацию по ssh ключу чаще всего можно увидеться на серверах git, или же в IDE (phpStorm, Aptana, etc). Создать ключ в ОС linux довольно простая задача. В этой статье описывается как создать ключ на базе ОС Ubuntu Server 12.04.

Читать дальше →

Встречайте, SHA-3

Хотя SHA-2 ещё не был скомпрометирован, профессора из National Institute of Standards and Technology выбрали алгоритм, который прийдёт ему на смену. После нескольких лет сложных анализов, алгоритм был выбран из 64 претендентов. Встречайте, Keccak.

Официальный анонс.

Идея для архитектуры приложения на yii. Часть 1. Введение и конфиги

Добрый день. Сегодня я хотел бы поделиться простым рецептом для архитектуры приложений малого и среднего размера на Yii. Идея навеяна разработчиком 2GIS.API Алексеем Спиридоновым. Видео с конференции: www.youtube.com/watch?v=GyX5uAnApKg&feature=plcp

Основная проблема начинающих разработчиков в том, что они не понимают принципа MVC. Приведу толкование MVC с точки зрения википедии в миллионный раз:
Model-view-controller (MVC, «Модель-представление-поведение», «Модель-представление-контроллер») — схема использования нескольких шаблонов проектирования, с помощью которых модель данных приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента так, что модификация одного из компонентов оказывает минимальное воздействие на остальные.

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

Для начала определим, что же должен делать каждый слой MVC.

M. Модель
Модель данных. То есть все что у нас хранится в базах данных (mysql, sqlite, couch, redis и тд). Работа с данными происходит только внутри модели.

V. Представление
Представление данных. Сценарии, описывающие, как данные моделей будут представлены конечному пользователю. Это может быть html страница, json массив, qr код и т.д.

C. Контроллер
Это сердце приложение. Контроллер определяет как ведёт себя приложение. Какие модели и представления использует. Тут-то чаще всего и городят разработчики полную ересь. Начинают обновлять данные в базе данных, генерируют html сущности, и это только самые безобидные примеры.

Собственно основная мысль архитектуры