瀏覽代碼

'用户管理+登录'

wangchuanbao 1 年之前
父節點
當前提交
bc0766a648

+ 2 - 2
app/admin/controller/dept/Dept.php

@@ -19,8 +19,8 @@ class Dept
      */
     public function deptList(Request $request)
     {
-        $page = $request->get('page', '1');
-        $limit = $request->get('limit', '10');
+        $page = $request->get('page', 1);
+        $limit = $request->get('limit', 10);
         $keywords = format_string($request->get('keywords', ''));
 
         return DeptService::deptList($page, $limit, $keywords);

+ 21 - 0
app/admin/controller/user/Auth.php

@@ -0,0 +1,21 @@
+<?php
+
+namespace app\admin\controller\user;
+
+use app\admin\service\user\AuthService;
+use app\admin\validate\user\AuthValidate;
+use app\admin\validate\user\UserValidate;
+use support\Request;
+
+class Auth
+{
+    public function login(Request $request)
+    {
+        $validate = new AuthValidate();
+        if (!$validate->scene('login')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return AuthService::login($request->post());
+    }
+}

+ 132 - 0
app/admin/controller/user/User.php

@@ -0,0 +1,132 @@
+<?php
+
+namespace app\admin\controller\user;
+
+use app\admin\service\dept\DeptService;
+use app\admin\service\role\RoleService;
+use app\admin\service\user\UserService;
+use app\admin\validate\user\UserValidate;
+use app\model\Serial;
+use support\Request;
+
+class User
+{
+    /**
+     * @Desc 用户列表
+     * @Author Gorden
+     * @Date 2024/2/21 14:46
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function userList(Request $request)
+    {
+        $page = $request->get('page', 1);
+        $limit = $request->get('limit', 10);
+        $keywords = $request->get('keywords', '');
+
+        return UserService::userList($page, $limit, $keywords);
+    }
+
+    /**
+     * @Desc 用户详情
+     * @Author Gorden
+     * @Date 2024/2/21 14:53
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function userInfo($id)
+    {
+        return UserService::userInfo($id);
+    }
+
+    /**
+     * @Desc 添加用户
+     * @Author Gorden
+     * @Date 2024/2/21 14:53
+     *
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function addUser(Request $request)
+    {
+        $validate = new UserValidate();
+        if (!$validate->scene('add')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+        // 账号是否已存在
+        if (UserService::checkUserExist($request->post('user_login_name'))) {
+            return json_fail('账号已存在');
+        }
+        // 部门是否存在
+        if (!empty($request->post('join_user_dept_id')) && !DeptService::checkDeptExist($request->post('join_user_dept_id'))) {
+            return json_fail('部门不存在');
+        }
+        // 角色是否存在
+        if (!empty($request->post('join_user_role_id')) && !RoleService::checkRoleExist($request->post('join_user_role_id'))) {
+            return json_fail('角色不存在');
+        }
+
+        return UserService::insertUser($request->post());
+    }
+
+    /**
+     * @Desc 修改用户
+     * @Author Gorden
+     * @Date 2024/2/21 14:07
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateUser($id, Request $request)
+    {
+        $validate = new UserValidate();
+        if (!$validate->scene('update')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+        // 部门是否存在
+        if (!empty($request->post('join_user_dept_id')) && !DeptService::checkDeptExist($request->post('join_user_dept_id'))) {
+            return json_fail('部门不存在');
+        }
+        // 角色是否存在
+        if (!empty($request->post('join_user_role_id')) && !RoleService::checkRoleExist($request->post('join_user_role_id'))) {
+            return json_fail('角色不存在');
+        }
+
+        return UserService::updateUser($id, $request->post());
+    }
+
+    /**
+     * @Desc 修改用户状态
+     * @Author Gorden
+     * @Date 2024/2/21 15:03
+     *
+     * @param $id
+     * @param Request $request
+     * @return \support\Response
+     */
+    public function updateStatus($id, Request $request)
+    {
+        $validate = new UserValidate();
+        if (!$validate->scene('update_status')->check($request->post())) {
+            return json_fail($validate->getError());
+        }
+
+        return UserService::updateStatus($id, $request->post());
+    }
+
+    /**
+     * @Desc 删除用户
+     * @Author Gorden
+     * @Date 2024/2/21 15:11
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public function delUser($id)
+    {
+        return UserService::delUser($id);
+    }
+}

+ 13 - 0
app/admin/service/dept/DeptService.php

@@ -195,4 +195,17 @@ class DeptService
 
         return json_success('删除部门成功');
     }
+
+    /**
+     * @Desc 检查部门是否存在
+     * @Author Gorden
+     * @Date 2024/2/21 13:37
+     *
+     * @param $deptId
+     * @return bool
+     */
+    public static function checkDeptExist($deptId)
+    {
+        return SysDept::where('dept_id', $deptId)->exists();
+    }
 }

+ 13 - 0
app/admin/service/role/RoleService.php

@@ -159,4 +159,17 @@ class RoleService
 
         return json_success('角色状态修改成功');
     }
+
+    /**
+     * @Desc 检查角色是否存在
+     * @Author Gorden
+     * @Date 2024/2/21 13:36
+     *
+     * @param $roleId
+     * @return bool
+     */
+    public static function checkRoleExist($roleId)
+    {
+        return SysRole::where('role_id', $roleId)->exists();
+    }
 }

+ 52 - 0
app/admin/service/user/AuthService.php

@@ -0,0 +1,52 @@
+<?php
+
+namespace app\admin\service\user;
+
+use app\model\SysUser;
+use support\Db;
+use Tinywan\Jwt\JwtToken;
+
+class AuthService
+{
+    public static function login($params)
+    {
+        DB::beginTransaction();
+        try {
+            $user = SysUser::findByLoginName($params['username']);
+            if (!$user || $user->user_login_pass != md5(sha1($params['password']))) {
+                throw new \Exception('账号 / 密码错误');
+            }
+            // 禁用用户
+            if ($user->user_status == 'DISABLED') {
+                throw new \Exception('当前账户已禁用,请联系管理员');
+            }
+            switch ($user->user_status) {
+                case 'DISABLED':
+                    throw new \Exception('当前账户已禁用,请联系管理员');
+                    break;
+                case 'PENDING':
+                    // 待激活用户登录后自动激活
+                    if (SysUser::where('user_id', $user->user_id)->update(['user_status' => 'ACTIVED'])) {
+                        throw new \Exception('用户状态修改失败');
+                    }
+                    break;
+                default:
+                    break;
+            }
+            $extend = [
+                'id' => $user->user_id,
+                'client' => 'admin'
+            ];
+            $token = JwtToken::generateToken($extend);
+            // 提交事务
+            DB::commit();
+
+            return json_success('', $token);
+        } catch (\Exception $e) {
+            // 回滚事务
+            DB::rollBack();
+
+            return json_fail($e->getMessage());
+        }
+    }
+}

+ 183 - 0
app/admin/service/user/UserService.php

@@ -0,0 +1,183 @@
+<?php
+
+namespace app\admin\service\user;
+
+use app\model\SysUser;
+use Illuminate\Support\Facades\Hash;
+
+class UserService
+{
+    /**
+     * @Desc 用户列表
+     * @Author Gorden
+     * @Date 2024/2/21 14:46
+     *
+     * @param $page
+     * @param $limit
+     * @param $keywords
+     * @return \support\Response
+     */
+    public static function userList($page, $limit, $keywords)
+    {
+        $list = SysUser::select('join_user_role_id', 'join_user_dept_id', 'user_status', 'user_category', 'user_name', 'user_login_name', 'user_mobile', 'user_remark', 'user_extend_json', 'user_addtimes')
+            ->when($keywords != '', function ($query) use ($keywords) {
+                $query->where('user_name', 'like', '%' . $keywords . '%');
+            })
+            ->orderBy('user_addtimes', 'DESC')
+            ->forPage($page, $limit)
+            ->get()
+            ->toArray();
+        $count = SysUser::when($keywords != '', function ($query) use ($keywords) {
+            $query->where('user_name', 'like', '%' . $keywords . '%');
+        })->count();
+
+        return json_success('', compact('list', 'page', 'limit', 'count'));
+    }
+
+    /**
+     * @Desc 用户详情
+     * @Author Gorden
+     * @Date 2024/2/21 14:52
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function userInfo($id)
+    {
+        $user = SysUser::select('join_user_role_id', 'join_user_dept_id', 'user_status', 'user_category', 'user_name', 'user_login_name', 'user_mobile', 'user_remark', 'user_extend_json', 'user_addtimes')
+            ->where('user_id', $id)
+            ->first();
+        if (!$user) {
+            return json_fail('用户不存在');
+        }
+
+        return json_success('', $user->toArray());
+    }
+
+    /**
+     * @Desc 添加用户
+     * @Author Gorden
+     * @Date 2024/2/21 13:50
+     *
+     * @param $params
+     * @return \support\Response
+     */
+    public static function insertUser($params)
+    {
+        try {
+            $data = [
+                'user_id' => self::generateUserId(),
+                'join_user_role_id' => $params['join_user_role_id'],
+                'join_user_dept_id' => $params['join_user_dept_id'],
+                'user_status' => $params['user_status'],
+                'user_category' => $params['user_category'],
+                'user_name' => $params['user_name'],
+                'user_login_name' => $params['user_login_name'],
+                'user_login_pass' => md5(sha1($params['user_login_pass'])),
+                'user_mobile' => $params['user_mobile'],
+                'user_remark' => $params['user_remark'],
+                'user_extend_json' => !empty($params['user_extend_json']) ? $params['user_extend_json'] : '{}',
+                'user_addtimes' => time()
+            ];
+            if (!SysUser::insert($data)) {
+                throw new \Exception('添加用户失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('添加用户失败');
+        }
+
+        return json_success('添加用户成功');
+    }
+
+    /**
+     * @Desc 修改用户
+     * @Author Gorden
+     * @Date 2024/2/21 14:06
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateUser($id, $params)
+    {
+        try {
+            $data = [
+                'join_user_role_id' => $params['join_user_role_id'],
+                'join_user_dept_id' => $params['join_user_dept_id'],
+                'user_status' => $params['user_status'],
+                'user_category' => $params['user_category'],
+                'user_name' => $params['user_name'],
+                'user_remark' => $params['user_remark'],
+                'user_extend_json' => !empty($params['user_extend_json']) ? $params['user_extend_json'] : '{}'
+            ];
+            // 密码变动
+            if (!empty($params['user_login_pass'])) {
+                $data['user_login_pass'] = md5(sha1($params['user_login_pass']));
+            }
+            if (!SysUser::where('user_id', $id)->update($data)) {
+                throw new \Exception('修改用户失败');
+            }
+        } catch (\Exception $e) {
+            dd($e->getMessage());
+            return json_fail('修改用户失败');
+        }
+
+        return json_success('修改用户成功');
+    }
+
+    /**
+     * @Desc 修改用户状态
+     * @Author Gorden
+     * @Date 2024/2/21 15:03
+     *
+     * @param $id
+     * @param $params
+     * @return \support\Response
+     */
+    public static function updateStatus($id, $params)
+    {
+        try {
+            if (SysUser::where('user_id', $id)->update(['user_status' => $params['user_status']])) {
+                throw new \Exception('用户状态修改失败');
+            }
+        } catch (\Exception $e) {
+            dd($e->getMessage());
+            return json_fail('用户状态修改失败');
+        }
+
+        return json_success('用户状态修改成功');
+    }
+
+    /**
+     * @Desc 删除用户
+     * @Author Gorden
+     * @Date 2024/2/21 15:11
+     *
+     * @param $id
+     * @return \support\Response
+     */
+    public static function delUser($id)
+    {
+        try {
+            if (!SysUser::where('user_id', $id)->delete()) {
+                throw new \Exception('删除用户失败');
+            }
+        } catch (\Exception $e) {
+            return json_fail('删除用户失败');
+        }
+
+        return json_success('删除用户成功');
+    }
+
+    public static function checkUserExist($account)
+    {
+        return SysUser::where('user_login_name', $account)->exists();
+    }
+
+    public static function generateUserId()
+    {
+        $random = random_string(8);
+
+        return 'UR' . date('YmdHis') . $random;
+    }
+}

+ 20 - 0
app/admin/validate/user/AuthValidate.php

@@ -0,0 +1,20 @@
+<?php
+
+
+namespace app\admin\validate\user;
+
+use think\Validate;
+
+class AuthValidate extends Validate
+{
+    protected $rule = [
+        'username' => 'require|alphaDash',
+        'password' => 'require',
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'login' => ['username', 'password']
+    ];
+}

+ 27 - 0
app/admin/validate/user/UserValidate.php

@@ -0,0 +1,27 @@
+<?php
+
+namespace app\admin\validate\user;
+
+use think\Validate;
+
+class UserValidate extends Validate
+{
+    protected $rule = [
+        'join_user_role_id'     => 'integer',
+        'join_user_dept_id'     => 'integer',
+        'user_status'           => 'require|in:ACTIVED,DISABLED,PENDING',
+        'user_category'         => 'require|in:EMPLOY,OTHER',
+        'user_name'             => 'require|chsDash',
+        'user_login_name'       => 'require|alphaDash',
+        'user_login_pass'       => 'require',
+        'user_mobile'           => 'mobile'
+    ];
+
+    protected $message = [];
+
+    protected $scene = [
+        'add' => ['join_user_role_id','join_user_dept_id','user_status','user_category','user_name','user_login_name','user_login_pass','user_login_bcrypt','user_mobile'],
+        'update' => ['join_user_role_id','join_user_dept_id','user_status','user_category','user_name'],
+        'update_status' => ['user_status'],
+    ];
+}

+ 18 - 0
app/model/Serial.php

@@ -0,0 +1,18 @@
+<?php
+
+namespace app\model;
+
+use support\Db;
+use support\Model;
+
+class Serial extends Model
+{
+    public $table = 'serial';
+
+    protected $primaryKey = 'serial';
+
+    public static function getSerial()
+    {
+        Db::insert('insert into `app_serial` value(default)');
+    }
+}

+ 22 - 0
app/model/SysUser.php

@@ -0,0 +1,22 @@
+<?php
+
+namespace app\model;
+
+use support\Model;
+
+class SysUser extends Model
+{
+    protected $table = 'sys_user';
+
+    protected $primaryKey = 'user_id';
+
+    public const UPDATED_AT = null;
+
+    protected $keyType = 'string';
+
+    /* 按登录名查找用户 */
+    public static function findByLoginName($name)
+    {
+        return self::where('user_login_name', $name)->first();
+    }
+}

+ 1 - 1
config/plugin/tinywan/jwt/app.php

@@ -22,7 +22,7 @@ return [
         // 时钟偏差冗余时间,单位秒。建议这个余地应该不大于几分钟。
         'leeway' => 60,
         // 单设备登录
-        'is_single_device' => false,
+        'is_single_device' => true,
         // 缓存令牌时间,单位:秒。默认 7 天
         'cache_token_ttl' => 604800,
         // 缓存令牌前缀

+ 21 - 8
route/api.php

@@ -2,22 +2,35 @@
 
 use Webman\Route;
 
+/* 鉴权 */
+Route::post('/auth/login',[\app\admin\controller\user\Auth::class,'login']);
+
 /* 角色管理 */
 Route::group('/role', function () {
     Route::get('/list', [\app\admin\controller\role\Role::class, 'roleList']);
-    Route::get('/info/{id:\d}', [\app\admin\controller\role\Role::class, 'roleInfo']);
+    Route::get('/info/{id:\d+}', [\app\admin\controller\role\Role::class, 'roleInfo']);
     Route::post('/add', [\app\admin\controller\role\Role::class, 'addRole']);
-    Route::post('/update/{id:\d}', [\app\admin\controller\role\Role::class, 'updateRole']);
-    Route::delete('/delete/{id:\d}', [\app\admin\controller\role\Role::class, 'delRole']);
-    Route::post('/updateStatus/{id:\d}', [\app\admin\controller\role\Role::class, 'updateStatus']);
+    Route::post('/update/{id:\d+}', [\app\admin\controller\role\Role::class, 'updateRole']);
+    Route::delete('/delete/{id:\d+}', [\app\admin\controller\role\Role::class, 'delRole']);
+    Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\role\Role::class, 'updateStatus']);
 });
 
 /* 部门管理 */
 Route::group('/dept', function () {
     Route::get('/list', [\app\admin\controller\dept\Dept::class, 'deptList']);
-    Route::get('/info/{id:\d}', [\app\admin\controller\dept\Dept::class, 'deptInfo']);
+    Route::get('/info/{id:\d+}', [\app\admin\controller\dept\Dept::class, 'deptInfo']);
     Route::post('/add', [\app\admin\controller\dept\Dept::class, 'addDept']);
-    Route::post('/update/{id:\d}', [\app\admin\controller\dept\Dept::class, 'updateDept']);
-    Route::post('/updateStatus/{id:\d}', [\app\admin\controller\dept\Dept::class, 'updateStatus']);
-    Route::delete('/delete/{id:\d}', [\app\admin\controller\dept\Dept::class, 'delDept']);
+    Route::post('/update/{id:\d+}', [\app\admin\controller\dept\Dept::class, 'updateDept']);
+    Route::post('/updateStatus/{id:\d+}', [\app\admin\controller\dept\Dept::class, 'updateStatus']);
+    Route::delete('/delete/{id:\d+}', [\app\admin\controller\dept\Dept::class, 'delDept']);
+});
+
+/* 用户管理 */
+Route::group('/user', function () {
+    Route::get('/list', [\app\admin\controller\user\User::class, 'userList']);
+    Route::get('/info/{id:\w+}', [\app\admin\controller\user\User::class, 'userInfo']);
+    Route::post('/add', [\app\admin\controller\user\User::class, 'addUser']);
+    Route::post('/update/{id:\w+}', [\app\admin\controller\user\User::class, 'updateUser']);
+    Route::post('/updateStatus/{id:\w+}', [\app\admin\controller\user\User::class, 'updateStatus']);
+    Route::delete('/delete/{id:\w+}', [\app\admin\controller\user\User::class, 'delUser']);
 });

+ 28 - 0
support/helpers.php

@@ -553,3 +553,31 @@ function input(string $param = null, $default = null)
 {
     return is_null($param) ? request()->all() : request()->input($param, $default);
 }
+
+function random_string($length, $type = 'all')
+{
+    $string = 'abcdefghijklmnopqrstuvwxyz';
+    $number = '0123456789';
+
+    switch ($type) {
+        case 'all':
+            $result = $string . $number;
+            break;
+        case 'string':
+            $result = $string;
+            break;
+        case 'number':
+            $result = $number;
+            break;
+        default:
+            break;
+    }
+
+    $return = '';
+    $totalLength = strlen($result);
+    for ($i = 0; $i < $length; $i++) {
+        $return .= $result[mt_rand(0, $totalLength - 1)];
+    }
+
+    return $return;
+}