Day27 laravel todolist 建立使用者群组

Day27 laravel todolist 建立使用者群组

上篇我们讲解忘记密码功能後,使用者系统就建立的差不多了,不过我认为,难得已经可以辨别各个使用者了,能不能让各个使用者之间有些互动?

所以我当时设计table时,将user及card设计为多对多,这表示一个user有多张card,而同时一张card也可能会有多个user拥有,实现多人编辑同一张card的功能。

我的需求大概是这样的

  1. card创立者可以邀请其他user共同编辑这张card
  2. 可以将有编辑权限的user踢出
  3. 不能踢出card创立者,除了card创立者自己踢自己
  4. 当创立者踢出自己,card所有者将会归下一位user所有
  5. 若是card只剩自己拥有,而自己退出的情况,card将会删除
  6. 除了card创立者,其余人等皆不能删除卡片

以上就是我设想的群组功能,按照惯例我会先做最基本的功能,将邀请及踢出的功能做出,再想办法实现那些if else的情况。

邀请使用者进入群组

以上是我专案设计的table,在之前的文章中有提过,我在作card的CRUD之前会先用user去关联,因此我想到,如果我要邀请那个user那我只要在groups这张表上面加上user_id和card_id不就可以了吗?

因此这是我的邀请功能

    #新增user 进来群组
    public function store(Request $request, $cardId)
    {
        $userData = $request->userData;
        $card = $userData->ShowCards->find($cardId);
        if (!$card) {
            return response()->json(['status' => false, 'error' => 'card search not found'], 400);
        }
        $userEmail = $request->email;
        $addUser = Users::where('email', $userEmail)->first();
        if (!$addUser) {
            return response()->json(['status' => false, 'error' => 'user search not found'], 400);
        }
        $userId = $addUser->id;
        $group = $card->ShowGroups->where('users_id', $userId)->first();
        if (isset($group)) {
            return response()->json(['status' => false, 'error' => 'user is already in card'], 400);
        }

        $create = Groups::create(['users_id' => $userId, 'card_id' => $cardId,]);
        $card->update(['private' => false]);
        return response()->json(['status' => true, 'group_data' => $create]);
    }

说明:
这个功能我会需要使用者输入被邀请者的email,还有想要邀他进哪一张card的card id。

  • 4~8
    先判别使用者是谁,关联他所有的card,使用find()寻找该card,若找不到则是card id输入错误,回报错误400。
  • 9~13
    用email寻找被邀请者的user资料,若找不到则回传错误400。
  • 14~18
    找到被邀请者的资料後取出user的id,使用card关联到groups资料再使用where()寻找该user,若是找到了,则是该user已经在群组中了,回传错误400。
  • 20
    将被邀请者加入groups这张表,表示他已有权限编辑该card
  • 21
    邀请後将card改为公有(这功能只是让前端好分类而已)
  • 22
    回传成功

以上便是我的群组功能的想法,不知道还有没有漏洞?我惯例会将最基本的create功能做好後,再将各个漏洞补起来,最基本的就是检查使用者输入的东西是否正确,再依需求设定其他if。顺带一提这只是最基本的功能,如果群组中还要分级,那可能groups中还要加上一个判断Lv的column,不过我想v现在先做出最基本的功能就好,之後再看要不要进行扩充,以上,Bye!


<<:  [Day 28] Laravel+MongoDB+Vue CRUD - part 1

>>:  第二十六章、燃烧吧!Three.js 小宇宙!(肆)

Swift纯Code之旅 Day8. 「TableView制作复习」

前言 昨天我们已经将DatePickerView新增在画面上了,今天就让我们再让新增闹钟的页面完成度...

Day 28 - Learned Index实作(2)

延续昨天的实作,首先我们先来修改一下昨天建置的 Learned Index 类别,还有一些参数需要储...

8.unity角色移动(刚体Rigidbody2D)

刚体2D(Rigidbody 2D) 当物体运动速度远小於光速可被视为理想刚体,可以忽略型变,也就是...

【30】使用混合精度(Mixed precision) 对训练产生的影响

Colab连结 一般我们在做机器学习任务时,在模型里计算的资料型态采用的是 float32 (即占用...

【Day07】记忆体存放与释放

在 Day04 有提到在 JavaScript 里, 函式执行时会产生函式执行环境,在该执行环境中会...