<?php
/**
 * Created by PhpStorm.
 * User: qjk
 * Date: 2022/03/28
 * Time: 15:07
 */

namespace Meibuyu\Rpc\Service\Interfaces\User;

interface AuthenticationInterface
{

    /**
     * 获取对应用户能够看到的菜单
     * @param string $applicationName
     * @param integer $userId
     * @return array
     */
    public function getMenus($applicationName, $userId): array;


    /**
     * 获取对应用户的菜单权限
     * @param string $applicationName 应用名称
     * @param integer $userId 用户 ID
     * @return array
     */
    public function getButtons($applicationName, $userId, $frontendPath):array;


    /**
     * 获取对应路由的接口权限结果
     * @param $path string 请求 URL 路径
     * @param $method string 路由名字
     * @param $applicationName string 应用名字
     * @param $userId integer  用户 ID
     * @return bool
     */
    public function authByRouter($applicationName, $path, $method, $userId):  bool;

    /**
     * @param string $appName 应用名称
     * @param integer $userId 用户 ID
     * @param array $buttonCodes
     * @return array
     */
    public function getAppBtnAccess($appName, $userId, $buttonCodes = []): array;


    /**
     * 获取指定用户数据权限
     * @param $uid 用户id
     * @param $code
     * @param $appName 应用名称
     */
    public function getUserDataAuth($uid,$code,$appName);


    /**
     * 获取用户领导的部门id数组 (包含正副职管理者)
     * @param $userId
     * @return array
     */
    public function leadDeptIds($userId);


    /**
     * 获取用户领导的团队id数组
     * @param $userIds
     * @return array
     */
    public function leadTeamIdsByUsers($userIds);


    /**
     * 判断是否是管理员
     * @param $userId
     * @return bool
     */
    public function isAdmin($userId): bool;


    /**
     * 获取用户对应权限角色名称列表
     * @param $userId
     * @return array
     */
    public function getUserRoleNames($userId): array;



    /**
     * 动态同步外部系统数据列表到某个权限数据详情表
     * @param string $code new_data_auth 表 code
     * @author Liu lu
     * @return true | string (error_msg)
     * date 2022-11-08
     */
    public function syncExternalDataAuth($code);


    /**
     * 获取数据权限拥有者 通过数据权限CODE
     * @param $dataAuthCode
     * @author Liu lu
     * date 2023-11-24
     */
    public function getPermissionOwnerByDataAuthCode($dataAuthCode);
}