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.
210 lines
7.3 KiB
210 lines
7.3 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | YFCMF [ WE CAN DO IT MORE SIMPLE ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2015-2016 http://www.rainfer.cn All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Author: rainfer <81818832@qq.com>
|
|
// +----------------------------------------------------------------------
|
|
|
|
namespace app\admin\model;
|
|
|
|
use app\admin\model\MemberList;
|
|
use think\Model;
|
|
use think\Db;
|
|
|
|
/**
|
|
* 后台用户模型
|
|
* @package app\admin\model
|
|
*/
|
|
class Admin extends Model
|
|
{
|
|
|
|
protected $autoWriteTimestamp = true;
|
|
protected $createTime = 'admin_addtime';
|
|
protected $updateTime = false;
|
|
/**
|
|
* 用户登录
|
|
* @param string $username 用户名
|
|
* @param string $password 密码
|
|
* @param bool $rememberme 记住登录
|
|
* @return bool|mixed
|
|
*/
|
|
public function login($username = '', $password = '', $rememberme = false)
|
|
{
|
|
$username = trim($username);
|
|
$password = trim($password);
|
|
$map['admin_username']=$username;
|
|
$map['admin_open']=1;
|
|
$user = self::get($map);
|
|
if (!$user) {
|
|
$this->error = '用户不存在或被禁用!';
|
|
} else {
|
|
if (encrypt_password($password,$user['admin_pwd_salt'])!==$user['admin_pwd']) {
|
|
$this->error = '密码错误!';
|
|
} else {
|
|
$aid = $user['admin_id'];
|
|
// 更新登录信息
|
|
$user['admin_last_ip'] = request()->ip();
|
|
$user['admin_last_time'] = time();
|
|
$user['admin_hits'] = $user['admin_hits']+1;
|
|
if ($user->save()) {
|
|
// 自动登录
|
|
$this->auto_login(self::get($aid), $rememberme);
|
|
}
|
|
return $aid;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* 自动登录
|
|
* @param mixed $user 用户对象
|
|
* @param bool $rememberme 是否记住登录,默认7天
|
|
*/
|
|
public function auto_login($user, $rememberme = false)
|
|
{
|
|
$avatar= $user->admin_avatar;
|
|
if(!file_exists($avatar))$avatar='/public/img/headicon.png';
|
|
// 记录登录
|
|
$auth = array(
|
|
'aid' => $user->admin_id,
|
|
'role' => '',
|
|
'admin_avatar' => $avatar,
|
|
'admin_last_change_pwd_time' => $user->admin_changepwd,
|
|
'admin_realname' => $user->admin_realname,
|
|
'admin_username' => $user->admin_username,
|
|
'member_id' => $user->member_id,
|
|
'admin_last_ip' => $user->admin_last_ip,
|
|
'admin_last_time' => $user->admin_last_time
|
|
);
|
|
$access=db('auth_group_access')->where(['uid'=>$auth['aid']])->order('group_id asc')->find();
|
|
if($access)$auth['role']=$access['group_id'];
|
|
session('admin_auth', $auth);
|
|
session('admin_auth_sign', data_signature($auth));
|
|
|
|
// 记住登录
|
|
if ($rememberme) {
|
|
$signin_token = $user->admin_username.$user->admin_id.$user->admin_last_time;
|
|
cookie('aid', $user->admin_id, 24 * 3600 * 7);
|
|
cookie('signin_token', data_signature($signin_token), 24 * 3600 * 7);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 判断是否登录
|
|
* @return int 0或用户id
|
|
*/
|
|
public function is_login()
|
|
{
|
|
$user = session('admin_auth');
|
|
if (empty($user)) {
|
|
if (cookie('?aid') && cookie('?signin_token')) {
|
|
$user = $this::get(cookie('aid'));
|
|
if ($user) {
|
|
$signin_token = data_signature($user['admin_username'].$user['admin_id'].$user['admin_last_time']);
|
|
if (cookie('signin_token') == $signin_token) {
|
|
$this->auto_login($user, true);
|
|
return $user['admin_id'];
|
|
}
|
|
}
|
|
};
|
|
return 0;
|
|
}else{
|
|
return session('admin_auth_sign') == data_signature($user) ? $user['aid'] : 0;
|
|
}
|
|
}
|
|
/**
|
|
* 增加管理员
|
|
*/
|
|
public static function add($admin_username,$admin_pwd_salt='',$admin_pwd,$admin_email='',$admin_tel='',$admin_open=0,$admin_realname='',$group_id=1)
|
|
{
|
|
$admin_pwd_salt=$admin_pwd_salt?:random(10);
|
|
$sldata=array(
|
|
'admin_username'=>$admin_username,
|
|
'admin_pwd_salt' => $admin_pwd_salt,
|
|
'admin_pwd'=>encrypt_password($admin_pwd,$admin_pwd_salt),
|
|
'admin_email'=>$admin_email,
|
|
'admin_tel'=>$admin_tel,
|
|
'admin_open'=>$admin_open,
|
|
'admin_realname'=>$admin_realname,
|
|
'admin_ip'=>request()->ip(),
|
|
'admin_addtime'=>time(),
|
|
'admin_changepwd'=>time(),
|
|
);
|
|
$admin=self::create($sldata);
|
|
if($admin){
|
|
//添加管理组
|
|
$admin_id=$admin['admin_id'];
|
|
$accdata=array(
|
|
'uid'=>$admin_id,
|
|
'group_id'=>$group_id,
|
|
);
|
|
Db::name('auth_group_access')->insert($accdata);
|
|
return $admin_id;
|
|
}else{
|
|
return 0;
|
|
}
|
|
}
|
|
/**
|
|
* 修改管理员
|
|
* @param array
|
|
* @return bool
|
|
*/
|
|
public static function edit($data)
|
|
{
|
|
$admin=self::get($data['admin_id'])->toArray();
|
|
$admin['admin_username']=$data['admin_username'];
|
|
$admin['admin_email']=$data['admin_email'];
|
|
$admin['admin_tel']=$data['admin_tel'];
|
|
$admin['admin_realname']=$data['admin_realname'];
|
|
$admin['admin_open']=isset($data['admin_open'])?$data['admin_open']:0;
|
|
if($data['admin_pwd']){
|
|
$admin['admin_pwd_salt']=random(10);
|
|
$admin['admin_pwd']=encrypt_password($data['admin_pwd'],$admin['admin_pwd_salt']);
|
|
$admin['admin_changepwd']=time();
|
|
}
|
|
$rst=self::where('admin_id',$data['admin_id'])->update($admin);
|
|
if($rst!==false){
|
|
$access=Db::name('auth_group_access')->where('uid',$data['admin_id'])->find();
|
|
if($access){
|
|
//修改
|
|
if($access['group_id']!=$data['group_id']){
|
|
Db::name('auth_group_access')->where('uid',$data['admin_id'])->setField('group_id',$data['group_id']);
|
|
}
|
|
}else{
|
|
//增加
|
|
$access['uid']=$data['admin_id'];
|
|
$access['group_id']=$data['group_id'];
|
|
Db::name('auth_group_access')->insert($access);
|
|
}
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* 修改管理员
|
|
* @param array
|
|
* @return bool
|
|
*/
|
|
public static function avatar_edit($data)
|
|
{
|
|
$admin=self::get($data['admin_id'])->toArray();
|
|
$admin['admin_email']=$data['admin_email'];
|
|
$admin['admin_tel']=$data['admin_tel'];
|
|
$admin['admin_realname']=$data['admin_realname'];
|
|
if($data['admin_pwd']){
|
|
$admin['admin_pwd_salt']=random(10);
|
|
$admin['admin_pwd']=encrypt_password($data['admin_pwd'],$admin['admin_pwd_salt']);
|
|
$admin['admin_changepwd']=time();
|
|
}
|
|
$rst=self::where('admin_id',$data['admin_id'])->update($admin);
|
|
if($rst!==false){
|
|
return true;
|
|
}else{
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|