* @day: 2017/11/11 */ namespace app\admin\model\system; use crmeb\traits\ModelTrait; use crmeb\basic\BaseModel; use think\facade\Session; /** * Class SystemAdmin * @package app\admin\model\system */ class SystemAdmin extends BaseModel { /** * 数据表主键 * @var string */ protected $pk = 'id'; /** * 模型名称 * @var string */ protected $name = 'system_admin'; use ModelTrait; protected $insert = ['add_time']; public static function setAddTimeAttr($value) { return time(); } public static function setRolesAttr($value) { return is_array($value) ? implode(',', $value) : $value; } /** * 用户登陆 * @param $account * @param $pwd * @return bool */ public static function login($account, $pwd) { $adminInfo = self::get(compact('account')); if (!$adminInfo) return self::setErrorInfo('登陆的账号不存在!'); if ($adminInfo['pwd'] != md5(md5($pwd) . md5($adminInfo['salt']))) return self::setErrorInfo('账号或密码错误,请重新输入'); if (!$adminInfo['status']) return self::setErrorInfo('该账号已被关闭!'); self::setLoginInfo($adminInfo); event('SystemAdminLoginAfter', [$adminInfo]); return true; } /** * 保存当前登陆用户信息 */ public static function setLoginInfo($adminInfo) { Session::set('adminId', $adminInfo['id']); Session::set('adminInfo', $adminInfo->toArray()); Session::save(); } /** * 清空当前登陆用户信息 */ public static function clearLoginInfo() { Session::delete('adminInfo'); Session::delete('adminId'); Session::save(); } /** * 检查用户登陆状态 * @return bool */ public static function hasActiveAdmin() { return Session::has('adminId') && Session::has('adminInfo'); } /** * 获得登陆用户信息 * @return mixed * @throws \Exception */ public static function activeAdminInfoOrFail() { $adminInfo = Session::get('adminInfo'); if (!$adminInfo) exception('请登陆'); if (!$adminInfo['status']) exception('该账号已被关闭!'); return $adminInfo; } /** * 获得登陆用户Id 如果没有直接抛出错误 * @return mixed * @throws \Exception */ public static function activeAdminIdOrFail() { $adminId = Session::get('adminId'); if (!$adminId) exception('访问用户为登陆登陆!'); return $adminId; } /** * @return array|null * @throws \Exception */ public static function activeAdminAuthOrFail() { $adminInfo = self::activeAdminInfoOrFail(); if (is_object($adminInfo)) $adminInfo = $adminInfo->toArray(); return $adminInfo['level'] === 0 ? SystemRole::getAllAuth() : SystemRole::rolesByAuth($adminInfo['roles']); } /** * 获得有效管理员信息 * @param $id * @return mixed * @throws \Exception */ public static function getValidAdminInfoOrFail($id) { $adminInfo = self::get($id); if (!$adminInfo) exception('用户不能存在!'); if (!$adminInfo['status']) exception('该账号已被关闭!'); return $adminInfo; } /** * @param string $field * @param int $level * @return \think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ 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 ($where['name'] != '') $model = $model->where('account|real_name', 'LIKE', "%$where[name]%"); if ($where['roles'] != '') $model = $model->where("CONCAT(',',roles,',') LIKE '%,$where[roles],%'"); $model = $model->where('level', $where['level'])->where('is_del', 0); return self::page($model, function ($admin) { $admin->roles = SystemRole::where('id', 'IN', $admin->roles)->column('role_name', 'id'); }, $where); } }