Server : nginx/1.20.1
System : Linux iZ2ze9ojcl78uluczwag69Z 4.18.0-240.22.1.el8_3.x86_64 #1 SMP Thu Apr 8 19:01:30 UTC 2021 x86_64
User : www ( 1000)
PHP Version : 7.3.28
Disable Function : passthru,exec,system,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Directory :  /www/wwwroot/0531yanglao.com/app/admin/service/
Upload File :
Current Directory [ Writeable ] Root Directory [ Writeable ]


Current File : /www/wwwroot/0531yanglao.com/app/admin/service/AdminRoleService.php
<?php
/*
 * @Description  : 角色管理
 * @Author       : https://github.com/skyselang
 * @Date         : 2020-05-05
 * @LastEditTime : 2021-03-20
 */

namespace app\admin\service;

use think\facade\Db;
use app\common\cache\AdminRoleCache;
use app\common\cache\AdminUserCache;

class AdminRoleService
{
    /**
     * 角色列表
     *
     * @param array   $where   条件
     * @param integer $page    页数
     * @param integer $limit   数量
     * @param array   $order   排序
     * @param string  $field   字段
     * @param bool    $whereOr OR查询
     * 
     * @return array 
     */
    public static function list($where = [], $page = 1, $limit = 10,  $order = [], $field = '', $whereOr = false)
    {
        if (empty($field)) {
            $field = 'admin_role_id,role_name,role_desc,role_sort,is_disable,create_time,update_time';
        }

        if (empty($order)) {
            $order = ['role_sort' => 'desc', 'admin_role_id' => 'desc'];
        }

        if ($whereOr) {
            $count = Db::name('admin_role')
                ->whereOr($where)
                ->count('admin_role_id');

            $list = Db::name('admin_role')
                ->field($field)
                ->whereOr($where)
                ->page($page)
                ->limit($limit)
                ->order($order)
                ->select()
                ->toArray();
        } else {
            $where[] = ['is_delete', '=', 0];

            $count = Db::name('admin_role')
                ->where($where)
                ->count('admin_role_id');

            $list = Db::name('admin_role')
                ->field($field)
                ->where($where)
                ->page($page)
                ->limit($limit)
                ->order($order)
                ->select()
                ->toArray();
        }

        $pages = ceil($count / $limit);

        $data['count'] = $count;
        $data['pages'] = $pages;
        $data['page']  = $page;
        $data['limit'] = $limit;
        $data['list']  = $list;

        return $data;
    }

    /**
     * 角色信息
     *
     * @param integer $admin_role_id 角色id
     * 
     * @return array
     */
    public static function info($admin_role_id)
    {
        $admin_role = AdminRoleCache::get($admin_role_id);

        if (empty($admin_role)) {
            $admin_role = Db::name('admin_role')
                ->where('admin_role_id', $admin_role_id)
                ->find();

            if (empty($admin_role)) {
                exception('角色不存在:' . $admin_role_id);
            }

            $admin_menu_ids = $admin_role['admin_menu_ids'];

            if (empty($admin_menu_ids)) {
                $admin_menu_ids = [];
            } else {
                $admin_menu_ids = explode(',', $admin_menu_ids);
                foreach ($admin_menu_ids as $k => $v) {
                    $admin_menu_ids[$k] = (int) $v;
                }
            }

            $admin_role['admin_menu_ids'] = $admin_menu_ids;

            AdminRoleCache::set($admin_role_id, $admin_role);
        }

        return $admin_role;
    }

    /**
     * 角色添加
     *
     * @param array $param 角色信息
     * 
     * @return array
     */
    public static function add($param = [], $method = 'get')
    {
        if ($method == 'get') {
            $data['menu_tree'] = AdminMenuService::list()['list'];

            return $data;
        } else {
            sort($param['admin_menu_ids']);

            if (count($param['admin_menu_ids']) > 0) {
                if (empty($param['admin_menu_ids'][0])) {
                    unset($param['admin_menu_ids'][0]);
                }
            }

            $param['admin_menu_ids'] = implode(',', $param['admin_menu_ids']);
            $param['create_time']    = datetime();

            $admin_role_id = Db::name('admin_role')
                ->insertGetId($param);

            if (empty($admin_role_id)) {
                exception();
            }

            $param['admin_role_id'] = $admin_role_id;

            return $param;
        }
    }

    /**
     * 角色修改
     *
     * @param array $param 角色信息
     * 
     * @return array
     */
    public static function edit($param = [], $method = 'get')
    {
        $admin_role_id = $param['admin_role_id'];

        if ($method == 'get') {
            $data['admin_role'] = self::info($admin_role_id);
            $data['menu_tree']  = AdminMenuService::list()['list'];

            return $data;
        } else {
            unset($param['admin_role_id']);

            sort($param['admin_menu_ids']);

            if (count($param['admin_menu_ids']) > 0) {
                if (empty($param['admin_menu_ids'][0])) {
                    unset($param['admin_menu_ids'][0]);
                }
            }

            $param['admin_menu_ids'] = implode(',', $param['admin_menu_ids']);
            $param['update_time']    = datetime();

            $res = Db::name('admin_role')
                ->where('admin_role_id', $admin_role_id)
                ->update($param);

            if (empty($res)) {
                exception();
            }

            $param['admin_role_id'] = $admin_role_id;

            AdminRoleCache::del($admin_role_id);

            return $param;
        }
    }

    /**
     * 角色删除
     *
     * @param array $admin_role_id 角色id
     * 
     * @return array
     */
    public static function dele($admin_role_id)
    {
        $update['is_delete']   = 1;
        $update['delete_time'] = datetime();

        $res = Db::name('admin_role')
            ->where('admin_role_id', $admin_role_id)
            ->update($update);

        if (empty($res)) {
            exception();
        }

        $update['admin_role_id'] = $admin_role_id;

        AdminRoleCache::del($admin_role_id);

        return $update;
    }

    /**
     * 角色禁用
     *
     * @param array $param 角色信息
     * 
     * @return array
     */
    public static function disable($param)
    {
        $admin_role_id = $param['admin_role_id'];

        $update['is_disable']  = $param['is_disable'];
        $update['update_time'] = datetime();

        $res = Db::name('admin_role')
            ->where('admin_role_id', $admin_role_id)
            ->update($update);

        if (empty($res)) {
            exception();
        }

        $update['admin_role_id'] = $admin_role_id;

        AdminRoleCache::del($admin_role_id);

        return $update;
    }

    /**
     * 角色管理员
     *
     * @param array   $where   条件
     * @param integer $page    页数
     * @param integer $limit   数量
     * @param array   $order   排序
     * @param string  $field   字段
     * @param bool    $whereOr OR查询
     * 
     * @return array 
     */
    public static function user($where = [], $page = 1, $limit = 10,  $order = [], $field = '', $whereOr = false)
    {
        $data = AdminUserService::list($where, $page, $limit, $order, $field, $whereOr);

        return $data;
    }

    /**
     * 角色管理员解除
     *
     * @param array $param 菜单管理员id
     *
     * @return array
     */
    public static function userRemove($param)
    {
        $admin_role_id = $param['admin_role_id'];
        $admin_user_id = $param['admin_user_id'];

        $admin_user = AdminUserService::info($admin_user_id);

        $admin_role_ids = $admin_user['admin_role_ids'];
        foreach ($admin_role_ids as $k => $v) {
            if ($admin_role_id == $v) {
                unset($admin_role_ids[$k]);
            }
        }

        if (empty($admin_role_ids)) {
            $admin_role_ids = '';
        } else {
            $admin_role_ids = implode(',', $admin_role_ids);
        }

        $update['admin_role_ids'] = $admin_role_ids;
        $update['update_time']    = datetime();

        $res = Db::name('admin_user')
            ->where('admin_user_id', $admin_user_id)
            ->update($update);

        if (empty($res)) {
            exception();
        }

        $update['admin_role_id'] = $admin_role_id;
        $update['admin_user_id'] = $admin_user_id;

        AdminUserCache::upd($admin_user_id);

        return $update;
    }

    /**
     * 角色菜单id
     *
     * @param mixed $admin_role_id 角色id
     *
     * @return array
     */
    public static function getMenuId($admin_role_id)
    {
        if (empty($admin_role_id)) {
            return [];
        }

        $admin_role_ids = [];

        if (is_numeric($admin_role_id)) {
            $admin_role_ids[] = $admin_role_id;
        } elseif (is_array($admin_role_id)) {
            $admin_role_ids = $admin_role_id;
        } else {
            $admin_role_ids = explode(',', $admin_role_id);
        }

        $admin_menu_ids = [];
        foreach ($admin_role_ids as $k => $v) {
            $admin_role     = self::info($v);
            $admin_menu_ids = array_merge($admin_menu_ids, $admin_role['admin_menu_ids']);
        }
        $admin_menu_ids = array_unique($admin_menu_ids);

        sort($admin_menu_ids);

        return $admin_menu_ids;
    }
}