2016-08-18 4 views
4

Я видел некоторые проблемы по этой конкретной проблеме.Angular2 Router CanActivate, с параметрами?

В последнее время я работаю только над проектами angular2. Во всяком случае, я сейчас перехожу к проблеме. В устаревшем маршрутизаторе я добавил свою роль пользователя в части данных маршрута, я переопределил routerOutlet, чтобы проверить это значение до активации маршрута).

В настоящее время мы можем соответствовать строке CanActivate класса/интерфейса w/e, которую мы можем назвать.

Прямо сейчас, я хотел бы иметь возможность предоставить Разрешения (которые я ударил в Enum) таким классам CanActivate. Прежде чем я просто проверил, был ли пользователь зарегистрирован при доступе к моему SessionService, мне теперь нужно проверить, есть ли у пользователя определенные разрешения.

Как я вижу, теперь я должен реализовать новый класс, который реализует CanActivate для каждого разрешения. Прямо сейчас это означало бы, что у меня будет 7. Мы, однако, находимся на ранней стадии этого точного проекта, и, не слишком думая, я мог бы улучшить это до 11.

Что я вижу перед собой - это реализация, которая будет только стоил мне около 3 - 5 строк за такую ​​реализацию canActivate. Однако я бы лучше помог реализовать, где я мог бы предоставить свойства или параметры.

Не думать о ситуации, я должен реализовать классы, как:

CanActivateIfUserHasPermissionsViewContentAndViewUsers или даже дольше.

Примечание: в моей ситуации разрешения - это в основном несколько действий. Как и все элементы содержимого, или отредактируйте их все и т. Д.

+0

Хороший вопрос :) Я думаю, что это может быть сделано с другой стороны. Вы можете импортировать следующий маршрут в «CanActivateGuard» и посмотреть, есть ли у пользователя разрешение. –

+0

Вы получите путь, а не объект маршрута. Итак, что происходит, когда это детский маршрут, будет ли это соответствовать? Охраняет ли ваш охранник и о детских маршрутах? Или вы сканируете свои подмодули для конфигурации маршрута. Не проверили это, хотя. –

+0

У меня нет кода для проверки. Но я найду 'ActivatedRouteSnapshot'https: //angular.io/docs/ts/latest/api/router/index/ActivatedRouteSnapshot-interface.html –

ответ

1

Так что я не нашел способ реализовать мой CanActivate с параметрами.

Однако я нашел обходное решение, которое кажется мне прекрасным. У меня есть служба, в которой я могу загружать свои маршруты в конструкцию модуля. (Я просто добавляю его в конструктор модуля).

Мои маршруты теперь содержат данные {разрешения: [Мои значения здесь]}. Которые проверяются в hookActive hook, так как реализация canActivate также использует ту же службу.

Мое решение основано на моей дискуссии по этому вопросу другой: Angular2 RC5 Cross-Module Provider/Scanning

+0

Как вы получаете доступ к своим данным в CanActivate hook? Если я попытаюсь сделать это, у меня будет только доступ к этому, если Im в компоненте уже есть. Когда Im в защитнике CanActivate я не могу получить доступ к данным, указанным в маршруте. –

+0

Привет, как указано, я загружаю маршруты в службу. по строительству моей заявки. Поэтому, когда NgModule загружается. Это позволяет мне активировать, чтобы получить полную информацию о маршруте от этой службы на основе целевого пути.(Я сделал метод, который возвращает мой маршрут на основе этого). Таким образом, я получаю полные данные, и мне разрешено проверять, проверяет ли он –

Смежные вопросы