You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
zhishifufei_php/application/admin/model/system/SystemAdmin.php

220 lines
6.8 KiB

<?php
// +----------------------------------------------------------------------
// | 天诚科技 [ 刘海东 17600099397赋能开发者,助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.tczxkj.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed 该系统并不是自由软件,未经许可不能去掉相关版权
// +----------------------------------------------------------------------
// | Author:甘肃天诚志信电子商务有限公司 刘海东 联系电话维系17600099397
// +----------------------------------------------------------------------
namespace app\admin\model\system;
use traits\ModelTrait;
use basic\ModelBasic;
use behavior\system\SystemBehavior;
use service\HookService;
use think\Session;
/**
* Class SystemAdmin
* @package app\admin\model\system
*/
class SystemAdmin extends ModelBasic
{
use ModelTrait;
protected $insert = ['add_time'];
const sign = 'verification';
public static function setAddTimeAttr($value)
{
return time();
}
public static function setRolesAttr($value)
{
return is_array($value) ? implode(',', $value) : $value;
}
/**
* 用户登陆
* @param string $account 账号
* @param string $pwd 密码
* @param string $verify 验证码
* @return bool 登陆成功失败
*/
public static function login($account, $pwd)
{
$adminInfo = self::get(compact('account'));
if (!$adminInfo) return self::setErrorInfo('登陆的账号不存在!');
if ($adminInfo['pwd'] != $pwd) return self::setErrorInfo('账号或密码错误,请重新输入');
if (!$adminInfo['status']) return self::setErrorInfo('该账号已被关闭!');
self::setLoginInfo($adminInfo->toArray());
HookService::afterListen('system_admin_login', $adminInfo, null, false, SystemBehavior::class);
return true;
}
/**
* 保存当前登陆用户信息
*/
public static function setLoginInfo($adminInfo)
{
//补充角色信息
$roleSign = SystemRole::where(['id' => $adminInfo['roles']])->value('sign');
$adminInfo['role_sign'] = $roleSign ? $roleSign : "";
Session::set('adminId', $adminInfo['id'], 'admin');
Session::set('adminInfo', $adminInfo, 'admin');
}
/**
* 清空当前登陆用户信息
*/
public static function clearLoginInfo()
{
Session::delete('adminInfo', 'admin');
Session::delete('adminId', 'admin');
Session::clear('admin');
}
/**
* 检查用户登陆状态
* @return bool
*/
public static function hasActiveAdmin()
{
return Session::has('adminId', 'admin') && Session::has('adminInfo', 'admin');
}
/**
* 获得登陆用户信息
* @return mixed
*/
public static function activeAdminInfoOrFail()
{
$adminInfo = Session::get('adminInfo', 'admin');
if (!$adminInfo) exception('请登陆');
if (!$adminInfo['status']) exception('该账号已被关闭!');
return $adminInfo;
}
/**
* 获得登陆用户Id 如果没有直接抛出错误
* @return mixed
*/
public static function activeAdminIdOrFail()
{
$adminId = Session::get('adminId', 'admin');
if (!$adminId) exception('访问用户为登陆登陆!');
return $adminId;
}
/**
* @return array
*/
public static function activeAdminAuthOrFail()
{
$adminInfo = self::activeAdminInfoOrFail();
return $adminInfo['level'] === 0 ? SystemRole::getAllAuth() : SystemRole::rolesByAuth($adminInfo['roles']);
}
/**
* 获得有效管理员信息
* @param $id
* @return static
*/
public static function getValidAdminInfoOrFail($id)
{
$adminInfo = self::get($id);
if (!$adminInfo) exception('用户不能存在!');
if (!$adminInfo['status']) exception('该账号已被关闭!');
return $adminInfo;
}
/**
* @param $field
* @return false|\PDOStatement|string|\think\Collection
*/
public static function getOrdAdmin($field = 'real_name,id', $level = 0)
{
return self::where('level', '>=', $level)->field($field)->select();
}
public static function getTopAdmin($field = 'real_name,id')
{
return self::where('level', 0)->field($field)->select();
}
/**
* @param $where
* @return array
*/
public static function systemPage($where)
{
$model = new self;
if (isset($where['name']) && $where['name'] != '') {
$model = $model->where('account|real_name', 'LIKE', "%$where[name]%");
}
if (isset($where['roles']) && $where['roles'] != '') {
$model = $model->where("CONCAT(',',roles,',') LIKE '%,$where[roles],%'");
}
if (isset($where['level'])) {
$model = $model->where('level', $where['level']);
}
$model = $model->where('is_del', 0);
return self::page($model, function ($admin, $key) {
$admin->roles = SystemRole::where('id', 'IN', $admin->roles)->column('role_name');
}, $where);
}
/**根据身份获取后台账号列表
* @param $sign 角色身份标识
* @return false|\PDOStatement|string|\think\Collection
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public static function getRoleAdmin($sign = false)
{
$where['a.status'] = 1;
if ((is_array($sign) && !$sign) || !$sign) {
$role_sign = SystemRole::where('status', 1)
->field('sign')
->select()
->toArray();
$sign = array_column($role_sign, 'sign');
}
if (!is_array($sign) && $sign) {
$where['r.sign'] = $sign;
}
return self::where($where)
->whereIn('sign', $sign)
->alias('a')
->join('__SYSTEM_ROLE__ r', 'a.roles = r.id', 'LEFT')
->field('a.id as admin_id, a.account as admin_name, a.roles as role_id, a.level as admin_level, a.status as admin_status')
->select()
->toArray();
}
/**
* 检测用户权限身份
*/
public static function testUserLevel($user)
{
$sign = self::sign;
$role = SystemRole::where('sign', $sign)->where('status', 1)->find();
if (!$role) return false;
$admin = self::where('phone', $user['phone'])->find();
if (!$admin) return false;
if (in_array($role['id'], explode(',', $admin['roles']))) {
return true;
} else {
return false;
}
}
}