Не совсем, есть событие Model.buildRules
, которое можно использовать для добавления правил, но это все.
Я не уверен, что это слишком хорошая идея - смешивать несколько правил приложения в зависимости отв состоянии вне модели.То, чего вы пытаетесь достичь, звучит как контроль доступа, то есть авторизация, и я бы посоветовал реализовать проверки соответствующим образом.
Посмотрите на cakephp / авторизация Это позволяет вам реализовать очень гибкие политики, которые могут обрабатывать такие случаи.В качестве альтернативы есть функция авторизации старой школы, предоставляемая компонентом auth, или (крайне недокументированный) ACL плагин.
Если ваша авторизация действительно очень проста, т.е. область администратора = редактирование разрешено"и" область без прав администратора = редактирование НЕ разрешено", т. Е. В вашем приложении может быть только одна точка, где потребуется проверка, затем вывозможно, сойдет с рук что-то менее сложное, например, передача параметров в процессе сохранения.Опции будут переданы в правила, где вы можете проверить их соответствующим образом, то есть что-то вроде этого:
$options = [
'updateApproved' => true
];
$Model->save($entity, $options);
function ($entity, $settings)
{
if (isset($settings['updateApproved']) &&
$settings['updateApproved'] === true
) {
return true;
}
// ...
return !$entity->approved || $entity->isDirty('approved');
}
Таким образом, сохранение утвержденных объектов будет работать только тогда, когда true
передается через updateApproved
вариант.Как уже упоминалось, это не слишком удачное решение, в любом случае я бы посоветовал взглянуть на плагин авторизации и узнать, как правильно реализовать авторизацию.
См. Также