Как следить за несколькими значениями магазина в Vue? - PullRequest
0 голосов
/ 09 июня 2019

В нашем проекте есть ситуация, когда профиль пользователя выбирается на основе параметров маршрута .

При входе в систему и при обновлении данные текущего пользователя сохраняются в магазине.

Пока пользователь нажимает на странице своего профиля, параметры маршрута изменяются на егоуникальный идентификатор.

На основании этого идентификатора извлекаются данные пользователя .

В приложении добавлено несколько ролей, к которым администратор может получить доступ.все профили и обычный пользователь может просматривать только свой профиль.

Нам нужно проверить, имеет ли пользователь право доступа к данным других профилей, для этого нужны две детали.1. уникальный идентификатор текущего пользователя с ролью 2. идентификатор профиля из параметров маршрута.

Итак, чтобы проверить, есть ли у пользователя роль, нам нужно посмотреть для два значения маршрут параметры и пользователь подробности.

Как мы можем добиться этого, используя часы и в Vue и Vuex?

Ниже приведен код, объясняющий сценарий!

 // Current user details fetched on refresh and logging in.
 @Getter private currentUser!: User;


 @Watch('$route.params.id', { immediate: true })
  private refreshProfile(newVal: any, oldVal: any) {
    this.employeeId = this.$route.params.id;
    if (this.employeeId) {
      const hasPrivilege = this.$can(this.$permissions.CREATE, this.$modules.EMPLOYEE);
      const isUserProfile = this.currentUser.employeeCompanyId == this.employeeId;
      debugger;
      if (!hasPrivilege && !isUserProfile) {
        this.logout();
      } else {
        this.getUser({ employeeId: this.employeeId });
      }
    }
  }

Приведенный выше код работает без обновления.Когда пользователь пытается войти вручную для просмотра своего или других профилей непосредственно в URL-адресе с разрешением или без него, он выходит из системы, потому что текущий пользователь сведения извлекаются асинхронно!

Любая мысльможет быть полезным !!.

Заранее благодарим за ваше терпение и понимание.

...