wakanda.getCatalog() возвращает ошибку, если для одного из классов хранилища данных отсутствуют разрешения на описание.

метод getCatalog() javascript-клиента wakanda возвращает следующую ошибку, если в метод не передан массив класса данных и для текущего пользователя отсутствует одно из разрешений на описание в модели (это, скорее всего, так).

Ошибка:

{
  "__ERROR": [
    {
      "message": "No permission to describe the User datastore class",
      "componentSignature": "dbmg",
      "errCode": 1609
    }
  ]
}

Что считается лучшей практикой использования метода getCatalog()? Лучше всего передавать класс данных, необходимый методу getCatalog(), при каждом вызове на сервер?

Пример службы компании angular:

@Injectable()
export class CompanyService {

  constructor(private wakandaService: WakandaService,
              private exceptionService: ExceptionService) {
  }

  getCompanyList(): any {
    return this.wakandaService.getCatalog(['Company'])
    .then(data => {
      return data.UserProfile.getProfile();
    })
    .then(data => {      
      return data;
    })
    .catch(error => this.exceptionService.error(error));
  }
}

ОБНОВЛЕНИЕ:

Модель данных

Модель данных

Разрешения

Классу данных «Роль и пользователь» требуются разрешения «Администратор». Классу данных UserProfile требуются разрешения «Пользователь», и он является расширением класса данных «Пользователь».

Ошибка

При входе в качестве пользователя и вызове getCatalog(['UserProfile']) возвращается ошибка "Необходимый класс данных роли отсутствует в каталоге". -> Это правильно? Почему то же самое через REST API работает?

http://localhost:8081/rest/$catalog/UserProfile работает нормально.

При входе в качестве пользователя и вызове getCatalog(['UserProfile', 'Role']) возвращается ошибка "Нет разрешения на описание класса хранилища данных ролей". -> ОК


person Stefan    schedule 05.01.2017    source источник


Ответы (2)


Пока не уверен, что у вас есть все детали, необходимые для точного ответа (не уверен в том, как определена ваша модель (User, UserProfile..). Но, однако, вот как это работает. При передаче класса данных в методе getCatalog() он извлекает только указанный класс данных.

Внимание Если ваши классы данных связаны (отношение ‹> ), вы должны добавить связанные классы данных (расширение требуется автоматически)

Вы должны заставить его работать, просто написав return this.wakandaService.getCatalog(['Company', 'User'])

Конечно, вы также можете передать пустой массив, чтобы получить весь каталог this.wakandaService.getCatalog()

Не могли бы вы подтвердить, что это решает вашу проблему?

Спасибо :)

person FrédéricG    schedule 06.01.2017
comment
Привет, Фред, я обновил свой пост, пытаясь быть более конкретным. Надеюсь, вы понимаете, что я пытаюсь объяснить. - person Stefan; 09.01.2017

Очень жаль, я полностью пропустил тот факт, что вы обновили свой пост. Кстати, спасибо за обновление, теперь все ясно. Ну, я сделал быстрое решение, чтобы попытаться воспроизвести проблему года. (это не совсем то же самое, но это помогло)

Несколько моментов:

  • Недавно мы обновили метод getCatalog, чтобы сделать его более похожим на REST API. В нашей текущей версии DEV, когда у вас есть расширенный класс данных и связанный с ним класс данных, вы должны добавить в getCatalog все классы данных. В вашем случае это будет:

getCatalog(['UserProfile', 'Role', User]) При этом вы можете

wakClient.getCatalog(['UserProfile', 'User', 'Role']).then(function (ds) {
  console.log(ds);
  ds.UserProfile.query().then(function (result) 
      {
     console.log(result) 
            }
     )      
    });

И это работает

  • Тем не менее, я сделал этот быстрый тест с read Permissions и не описываю, поскольку в настоящее время у нас есть ошибка с разрешением describe. Как только мы это исправим, я повторю тот же тест с описанием разрешений и свяжусь с вами как можно скорее.
person FrédéricG    schedule 21.02.2017