<?php
// GENERATED CODE -- DO NOT EDIT!

// Original file comments:
//
// Сервис реализует функционал управления доступом пользователями к ресурсам
namespace Keyapis\AccessManagement\V1;

/**
 * Сервис управления доступом пользователей
 */
class GroupServiceClient extends \Grpc\BaseStub {

    /**
     * @param string $hostname hostname
     * @param array $opts channel options
     * @param \Grpc\Channel $channel (optional) re-use channel object
     */
    public function __construct($hostname, $opts, $channel = null) {
        parent::__construct($hostname, $opts, $channel);
    }

    /**
     * Метод получения группы.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroup(\Keyapis\AccessManagement\V1\GetGroupRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/GetGroup',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка групп.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetGroupList(\Keyapis\AccessManagement\V1\GetGroupListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_management.v1.GroupService/GetGroupList',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества групп.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupCount(\Keyapis\AccessManagement\V1\GetGroupCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/GetGroupCount',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод сохранения группы.
     * Поддерживает создание и обновление как UPSERT по Group.id.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\PostGroupRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostGroup(\Keyapis\AccessManagement\V1\PostGroupRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PostGroup',
        $argument,
        ['\Keyapis\AccessManagement\V1\PostGroupResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления группы.
     * Метод доступен для: admin, service
     * @param \Keyapis\AccessManagement\V1\DeleteGroupRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function DeleteGroup(\Keyapis\AccessManagement\V1\DeleteGroupRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/DeleteGroup',
        $argument,
        ['\Keyapis\AccessManagement\V1\DeleteGroupResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод создания группы по шаблону.
     * Метод доступен для: admin, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\PostGroupByTemplateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PostGroupByTemplate(\Keyapis\AccessManagement\V1\PostGroupByTemplateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PostGroupByTemplate',
        $argument,
        ['\Keyapis\AccessManagement\V1\PostGroupByTemplateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод привязки пользователя к группе.
     * Метод доступен для: admin, owner, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\PutGroupUserAttachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupUserAttach(\Keyapis\AccessManagement\V1\PutGroupUserAttachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PutGroupUserAttach',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupUserAttachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления привязки пользователя к группе.
     * Метод доступен для: admin, owner, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\PutGroupUserDetachRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupUserDetach(\Keyapis\AccessManagement\V1\PutGroupUserDetachRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PutGroupUserDetach',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupUserDetachResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения списка связей пользователей и групп.
     * Метод доступен для: admin, owner, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupUserListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetGroupUserList(\Keyapis\AccessManagement\V1\GetGroupUserListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_management.v1.GroupService/GetGroupUserList',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupUserListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества связей пользователей и групп.
     * Метод доступен для: admin, owner, service, bti, seller
     * @param \Keyapis\AccessManagement\V1\GetGroupUserCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupUserCount(\Keyapis\AccessManagement\V1\GetGroupUserCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/GetGroupUserCount',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupUserCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения уникальных назначенных атрибутов пользователя.
     * Метод также возвращает группы пользователя в виде атрибута (Claim) {key=GROUP_ID,value=Group.id}.
     * Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.
     * Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.
     * Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.
     * Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
     * @param \Keyapis\AccessManagement\V1\GetGroupClaimListRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\ServerStreamingCall
     */
    public function GetGroupClaimList(\Keyapis\AccessManagement\V1\GetGroupClaimListRequest $argument,
      $metadata = [], $options = []) {
        return $this->_serverStreamRequest('/keyapis.access_management.v1.GroupService/GetGroupClaimList',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupClaimListResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод получения количества уникальных назначенных атрибутов пользователя.
     * Метод также сосчитает и атрибуты групп {key=GROUP_ID,value=Group.id}.
     * Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.
     * Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.
     * Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.
     * Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
     * @param \Keyapis\AccessManagement\V1\GetGroupClaimCountRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupClaimCount(\Keyapis\AccessManagement\V1\GetGroupClaimCountRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/GetGroupClaimCount',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupClaimCountResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод проверки наличия назначенных атрибутов пользователя.
     * Метод также проверит и атрибуты групп {key=GROUP_ID,value=Group.id}.
     * Бизнес-пользователи получают только свои разрешения, поэтому для всех пользователей, кроме admin, owner, service, bti, seller игнорируются GroupClaimFilter.user_id, GroupClaimFilter.user_data, GroupClaimFilter.api_key_hash, а значения для них берутся из токена.
     * Для admin, owner, service, bti, seller при наличии GroupClaimFilter.user_id отдаем разрешения для указанного GroupClaimFilter.user_id и GroupClaimFilter.user_data, при отсутствии GroupClaimFilter.user_id значения берутся из токена.
     * Для admin, service при наличии GroupClaimFilter.api_key_hash возвращаем Claim с учетом только GroupClaimFilter.api_key_hash.
     * Метод доступен для: admin, master, slave, owner, employee, service, bti, seller, external_seller, ltp_first, mrf, manager
     * @param \Keyapis\AccessManagement\V1\GetGroupClaimExistRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function GetGroupClaimExist(\Keyapis\AccessManagement\V1\GetGroupClaimExistRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/GetGroupClaimExist',
        $argument,
        ['\Keyapis\AccessManagement\V1\GetGroupClaimExistResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод добавления ключа доступа ApiKey.
     * Метод доступен для: admin
     * @param \Keyapis\AccessManagement\V1\PutGroupApiKeyCreateRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupApiKeyCreate(\Keyapis\AccessManagement\V1\PutGroupApiKeyCreateRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PutGroupApiKeyCreate',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupApiKeyCreateResponse', 'decode'],
        $metadata, $options);
    }

    /**
     * Метод удаления ключей доступа ApiKey.
     * Метод доступен для: admin
     * @param \Keyapis\AccessManagement\V1\PutGroupApiKeyDeleteRequest $argument input argument
     * @param array $metadata metadata
     * @param array $options call options
     * @return \Grpc\UnaryCall
     */
    public function PutGroupApiKeyDelete(\Keyapis\AccessManagement\V1\PutGroupApiKeyDeleteRequest $argument,
      $metadata = [], $options = []) {
        return $this->_simpleRequest('/keyapis.access_management.v1.GroupService/PutGroupApiKeyDelete',
        $argument,
        ['\Keyapis\AccessManagement\V1\PutGroupApiKeyDeleteResponse', 'decode'],
        $metadata, $options);
    }

}
