why.xingtongworld.com项目
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

<?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;
}
}
}