Веб-служба с аутентификацией на уровне приложения и пользователя


Мне нужно создать сайт Drupal (D6 или D7 в порядке) с API. Модуль Услуг является очевидным выбором, но я пока не мог понять, возможно ли делать то, что я хочу.

Мой сайт будет содержать пользователей и список мобильных приложений, которые известны сайту. У каждого пользователя есть "журнал активности" на сайте (возможно, представление узлов, где тип = активность и пользователь = текущий пользователь). Пользователи могут использовать одно или несколько из этих приложений на своих мобильных устройствах. Когда пользователь что-то делает с приложением, приложение должно подключиться к сайту через API и написать сообщение (т. Е. создайте узел "активность") в журнале действий пользователя.

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

У меня есть еще не выяснен лучший способ сделать это с помощью Сервисов и связанных с ними модулей. Я надеюсь, что кто-нибудь сможет мне сказать:

  • если это можно сделать;
  • какая версия услуг мне нужна;
  • какие связанные модули можно использовать для аутентификации;
  • как их настроить.

Спасибо!

 2
Author: kiamlaluno, 2011-05-17

1 answers

В соответствии с D6, использование Сервисов 3.x

Возможно, будет проще учесть, что:

  • Аутентификация пользователя должна обрабатываться непосредственно Службами (OAuth/API/Сессия)
  • Использование определенного мобильного приложения является разрешением:
    • в вашем модуле в определении ресурсов добавьте аргумент access_callback и аргументы доступа:

Код:

/**
* Implementation of hook_services_resources().
*/
function mymodule_api_services_resources() {
  return array(
   'myresource' => array(
     'retrieve' => array(
       'callback' => '_mymodule_resource_retrieve',
       'access callback' => '_mymodule_api_access',
       'access arguments' => array('Use registered mobile app'),
       'access arguments append' => TRUE,
       ...
  • Добавьте соответствующие разрешения в my_module_permission() крюк: Код:

    /**
    * Access callback for the resource.
    *
    * @param string $op
    *  The operation that's going to be performed.
    * @param array $args
    *  The arguments that will be passed to the callback.
    * @return bool
    *  Whether access is given or not.
    */
    function _mymodule_api_access($op, $args) { ... }
    
  • А затем верните значение false, если мобильное приложение не зарегистрировано...

 6
Author: Manu, 2011-05-17 11:21:23