Symfony Ограничение доступа к действиям CRUD - PullRequest
0 голосов
/ 21 ноября 2010

У меня есть просто функция CRUD, сгенерированная Symfony. Существует класс статьи и владелец статьи. Я хочу запретить другим пользователям, кроме владельцев текущей статьи, редактировать ее. Я думал о настройке своего собственного фильтра или валидатора, но когда я буду внедрять валидатор, некоторые пользователи смогут войти в форму редактирования (они не могли только отправить ее). Но когда я реализую пользовательский фильтр, возникнет проблема с тем, чтобы фильтр выполнялся только перед некоторыми действиями (в этом случае измените).

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 22 ноября 2010

Я не думаю, что Symfony поддерживает управление доступом на уровне объекта из коробки.У меня была эта конкретная проблема в одном из моих приложений, и я закончил делать явную проверку, совпадает ли зарегистрированный пользователь с владельцем в действии редактирования.Это функция, которую я использовал для этого:

protected function hasObjectAccess($obj) {
    if ($this->getUser()->hasGroup('admin')
        || $obj->getOwnerId() == $this->getUser()->getId()))) {
      return true;
    }
    return false;
}
0 голосов
/ 21 ноября 2010

Я думаю, что это встроенный. Вам следует прочитать о файле security.yml .

ОБНОВЛЕНИЕ: я вижу ... очевидно система безопасности вызывает метод hasCredential() объекта пользователя . Возможно, вы могли бы расширить этот метод в своем пользовательском классе, чтобы он делал специальную проверку, когда его параметром является, например, article_owner.

Как только это будет сделано, все, что вам нужно будет сделать, это указать эти учетные данные для действий, которые вы хотите

...