@Sergey0808

Php Phalcon как создать списки контроля доступа для пользователей?

Я создал файл в проекте и определил его так:
use Phalcon\Acl\Adapter\Memory as AclList;
    use Phalcon\Acl;
    use Phalcon\Acl\Role;
    use Phalcon\Acl\Resource;


    $acl = new AclList();

    $acl->setDefaultAction(
        Acl::DENY
    );

    $roleUsers = new Role("Users", "User role");
    $roleGuests = new Role("Guests", "Guests role");

    $acl->addRole($roleUsers);
    $acl->addRole($roleGuests);

    $profilesResource = new Resource("Profiles");


    $acl->addResource(
        $profilesResource,
        [
            "show"
        ]
    );

    $acl->allow("Users", "Profiles", "show");
    $acl->deny("Guests", "Profiles", "show");


Потом пытаюсь сделать проверку в действие:
public function userShowAction()
    {
        $acl = new AclList();
        if ($acl->isAllowed("Guests", "Profiles", "show")) {
            $this->flashSession->error("Вы должны войти");
            $this->response->redirect("/");

        } elseif ($acl->isAllowed("Users", "Profiles", "show")) {
            $user = Users::findFirst($this->session->get("auth-id"));

            $this->view->name = $user->name;
            $this->view->about = $user->about;
            $this->view->email = $user->email;
            $this->view->robots = $user->robots;
        }


    }

В итоге не пускает на эту страницу. Понимаю что код неверный, но как сделать правильную проверку пользователей?
  • Вопрос задан
  • 703 просмотра
Пригласить эксперта
Ответы на вопрос 1
copist
@copist
Empower people to give
Документация
https://olddocs.phalconphp.com/en/3.0.0/api/Phalco...
https://olddocs.phalconphp.com/en/3.0.0/api/Phalco...

Тут основная сложность, не описанная в документациии - это конкретная реализация получения роли текущего пользователя
$acl->isAllowed("Guests", "Profiles", "show")
Надо как-то определить, что текущий пользователь имеет роль Guest - это выходит за рамки документации.

Вариант 1
Можно хранить код роли в отдельной колонке role таблицы user
Тогда будет $acl->isAllowed($user->role, "Profiles", "show")

Вариант 2
Можно в ACL прописать доступные права для каждого пользователя, например
$acl->allow("ivanoff", "Profiles", "show");
Тогда будет
$acl->isAllowed($usr->username, "Profiles", "show")
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы