Доступ к роли по состоянию объекта в symfony2 - PullRequest
1 голос
/ 03 августа 2011

Как реализовать сложные права доступа для модели? У меня есть модели:

class Unit {
...
}


class Order {
    const STATUS_NEW         = 0;
    const STATUS_NEEDCONFIRM = 1;
    const STATUS_CONFIRMED   = 2;
    const StATUS_CLOSED      = 3;

    /* @Column(name="status", type="smallint") */
    public $status = 0;

    /**
     * @var Doctrine\Common\Collections\ArrayCollection <Unit>
     *
     * @OneToMany(
     *     targetEntity="Unit",
     *     mappedBy="order",
     *     cascade={"persist", "remove"}
     * )
     */
    public $units;
}

У меня есть роли: ROLE_MANAGER, ROLE_OPERATOR

Права доступа зависят от свойства $ order: ROLE_MANAGER просмотреть заказ в любом статусе. ROLE_OPERATOR может добавлять юниты и просматривать заказы только с STATUS_NEEDCONFIRM

Изменения статуса: ROLE_MANAGER может переключать статус заказа только с STATUS_NEW на STATUS_NEEDCONFIRM и STATUS_CONFIRMED - STATUS_CLOSED

ROLE_OPERATOR может переключать статус заказа только с STATUS_NEEDCONFIRM на STATUS_CONFIRMED, если количество единиц заказа> 0

Есть модули рабочего процесса или примеры для symfony2?

1 Ответ

0 голосов
/ 03 августа 2011

Я бы, вероятно, создал бы службу , которая принимает Order и User сущности, знает, как определить, для каких ролей имеют разрешения для каких статусов, и возвращает true или false для разрешенных или запрещенных.

Вы могли бы использовать систему ACL , но это довольно редко документировано прямо сейчас, насколько широко используется. Если вы пойдете по этому пути, вам нужно будет обновить ACE, когда статус будет изменен, чтобы дать (или принять) надлежащие разрешения, и для этого вы, вероятно, снова обращаетесь к какой-либо службе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...