strapi - запретить пользователю выбирать только данные, связанные с ним - PullRequest
0 голосов
/ 12 ноября 2018

Обычно зарегистрированный пользователь получает все записи типа контента.

Я создал тип содержимого «фрагменты» (_id,name,content,users<<->>snippets)

<<->> означает отношение «имеет и принадлежит многим».

Я создал несколько тестовых пользователей и сделал запрос: curl -H 'Authorization: Bearer eyJ...' http://localhost:1337/snippets/

Основная проблема: аутентифицированный пользователь должен видеть только записи, назначенные ему.Вместо этого вошедший в систему пользователь получает все фрагменты, что плохо.

Как можно изменить запрос fetchAll(ctx.query);, чтобы он учитывался таким образом, чтобы он делал что-то вроде fetchAll(ctx.state.user.id); в /-route -> find -method?

Основной метод поиска находится здесь:

find: async (ctx) => {

    if (ctx.query._q) {
      return strapi.services.snippet.search(ctx.query);
    } else {
      return strapi.services.snippet.fetchAll(ctx.query);
    }
},

Подвопрос: знает ли strapi, какой пользователь вошел в систему, когда я делаю Bearer-Аутентификация по токену?

1 Ответ

0 голосов
/ 13 ноября 2018

Вы можете настроить маршрут / snippets / me в конфиге snippets.

Этот маршрут может вызывать метод контроллера Snippets.me, который будет проверять пользователя, а затем запрашивать фрагменты на основе пользователя.

Так что в api/snippet/config/routes.json было бы что-то вроде:

    {
      "method": "GET",
      "path": "/snippets/me",
      "handler": "Snippets.me",
      "config": {
        "policies": []
      }
    },

Затем в контроллере (api/snippet/controllers/Snippet.js) вы можете сделать что-то вроде:

  me: async (ctx) => {
    const user = ctx.state.user;    
    if (!user) {
      return ctx.badRequest(null, [{ messages: [{ id: 'No authorization header was found' }] }]);
    }

    const data = await strapi.services.snippet.fetch({user:user.id});  

    if(!data){
      return ctx.notFound();
    }

    ctx.send(data);
  },

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

...