StrapiJs - Аутентификация пользователя и профиль пользователя

1) Я построил тип содержимого информации профиля в strapijs. Добавил пользовательское отношение к нему. Профиль принадлежит одному пользователю ". Как простая социальная сеть.

2) Я добавил пару пользователей / информацию о профиле. Подключил для конкретного пользователя.

3) Протестировал api с почтальоном. Аутентификация работает, я вижу информацию профиля. Но проблема в том, что аутентифицированный пользователь может получить доступ к информации профиля других пользователей.

Как я могу ограничить одного пользователя, чтобы он видел только связанный профиль? Спасибо


person ertem aktay    schedule 16.08.2019    source источник
comment
Здравствуйте, не могли бы вы уточнить свой 3. балл, пожалуйста. Потому что, когда вы входите в систему, вы получаете свой пользовательский объект в ключе user. И это содержит только вашу пользовательскую информацию, поэтому я не понимаю.   -  person Jim LAURIE    schedule 04.09.2019
comment
Любой аутентифицированный пользователь может увидеть любой профиль пользователя. Я не могу ограничить профиль для определенного пользователя.   -  person ertem aktay    schedule 15.11.2019
comment
Значит, пользователь может видеть только информацию о пользователе + информацию о его профиле? А других пользователей не могли увидеть?   -  person Jim LAURIE    schedule 19.11.2019
comment
Точно. Мы должны применить новые правила и изменить исходный код strapi.   -  person ertem aktay    schedule 20.11.2019


Ответы (2)


Хорошо, поэтому для вашего варианта использования вы должны ограничить GET /users/ для всех своих пользователей. При этом никто не получит доступа к другим пользователям данных.

Но вы можете получить доступ к GET /users/me/ маршруту. И вы сможете получить доступ к данным пользователя Auth.

person Jim LAURIE    schedule 25.11.2019
comment
К сожалению, это невозможно с текущей административной панелью strapijs (по крайней мере, я не мог этого понять). Я могу ограничить GET / users /, но не GET / users / me /. В этом случае пользователь не может видеть всех пользователей, но видит профиль других пользователей с идентификаторами. Мы должны реализовать эту политику через исходный код. - person ertem aktay; 26.11.2019
comment
Вы не сможете ограничить это в админке nop. Вот он в дорожной карте portal.productboard. ru / strapi / 1-public-roadmap / c / - person Jim LAURIE; 28.11.2019

Вы можете легко создать собственную политику, которая будет сравнивать аутентифицированный user.id и запрошенный идентификатор пользователя профиля и отвечать только в том случае, если они совпадают - о создании политики читайте здесь - Справка по политике Strapi

    module.exports = async (ctx, next) => {
  const { body } = ctx.request
      if (ctx.state.user.id == ctx.request.query.userid || ctx.state.user.id == body.userid) {
        return await next();
      } 
      ctx.unauthorized(`You're not allowed to perform this action!`);
    };

Обратите внимание, что вам нужно вставить поле идентификатора пользователя в модель профиля. Мне пришлось использовать логическое ИЛИ, потому что у меня разные типы запросов - это зависит только от вашего запроса.

person Michael Perelman    schedule 16.12.2019