Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
public function executeBizRule($bizRule, $params, $data)
{
if ($bizRule instanceof Closure) {
return $bizRule($params, $data, $this);
}
return parent::executeBizRule($bizRule, $params, $data);
}
'actions'=>array(update), array(allow,
'actions'=>array('create'),
'roles'=>array('createNews'),
),
array('allow',
'actions' => array('update'),
'roles' => array(
'updateNews' => array(
'news' => $this->news
)),
),После создания элементов авторизации, компонент authManager (или его наследники, например, CPhpAuthManager, CDbAuthManager) загружает их автоматически. То есть, приведённый код запускается один раз, а НЕ для каждого запроса.
________________
Once we have established this hierarchy, the authManager component (e.g. CPhpAuthManager, CDbAuthManager) will load the authorization items automatically. Therefore, we only need to run the above code one time, and NOT for every request.
// в контроллере:
public function accessRules() {
return array(
array('allow',
'actions' => array('create', 'delete', 'update'),
'roles' => array(Access::EDIT_ARTICLE => array('article' => $this->article)),
),
)
class Access
{
/** Доступные роли
================================ */
const ROLE_USER = 'user';
/** Доступные действия для ролей
================================ */
const EDIT_ARTICLE = 'editArticle';
/** Правила
================================ */
static public $bizRules = array(
self::EDIT_ARTICLE => 'return Access::editArticle($params["article"]);',
)
/** Само сложное правило
================================ */
static public function editArticle($article) {
return random(1); // наша логика
}
}
RBAC Авторизация в YII и LDAP