codelabmw/teams

为任何 UI 框架提供团队管理逻辑。

v0.2.1-stable 2024-03-22 05:56 UTC

This package is auto-updated.

Last update: 2024-09-22 07:06:06 UTC


README

来自 Codelab 的 laravel 包,用于处理 laravel 应用程序的团队管理业务逻辑。它可以与任何 UI 框架一起使用。

该包的主要目的是提供资源共享以及共享资源的划分。

安装

要在您的 laravel 项目中添加此包,请运行以下命令。

composer require codelabmw/teams

安装后,运行以下命令以发布迁移和配置文件。

php artisan vendor:publish --tag=codelab-teams

然后运行以下命令以创建必要的表。

php artisan migrate

用法

创建团队

要开始创建团队,请在作为团队实体的模型 (您选择的任何模型以拥有团队) 中添加 HasTeam 特性。

<?php
...
use Codelab\Teams\Traits\HasTeam;

class User extends Authenticatable
{
    HasTeam;
    ...
}

一旦配置好实体,您就可以使用团队关系方法或提供的辅助方法创建团队。

  1. 使用团队实体的 teams 关系方法。

    $team = $user->teams()->create([...])
  2. 使用团队实体的 createTeam 辅助方法。

    $team = $user->createTeam([...])

createcreateTeam 函数期望以下字段。

name: 团队名称。必需。

slug: 通常是名称的小写和连字符形式。可选。

description: 团队的可选描述。可选。

status: 表示团队是否活跃或非活跃的整数(1 和 2 分别表示活跃和非活跃)。默认为 1(活跃)。您可以使用包提供的 Status 枚举

您可以在这里找到辅助方法的完整列表。

向团队添加成员

要向团队添加成员,首先您必须将 IsMember 特性添加到您的作为成员实体的模型。

<?php
...
use Codelab\Teams\Traits\IsMember;

class User extends Authenticatable {
    IsMember;
    ...
}

默认情况下,包将假设 App\Models\User 类是成员实体。这种行为可以在配置文件中更改,在 member 属性中指定您自己的成员实体类。

<?php

return [
    'member' => Your\Custom\Entity::class
];

一旦配置好成员实体,您可以使用以下任一选项向团队添加成员。

  1. 使用团队的 members 关系方法。

    // $member = new Your\Member\Entity
    $team->members()->attach($member);
  2. 使用团队的 addMember 辅助方法。

    $team->addMember($member->id)

    addMember 方法需要成员的 id,可以是整数或字符串。.

  3. 使用成员的 joinTeam 辅助方法。

    $member->joinTeam($team->id);

    joinTeam 方法需要团队的 id,可以是整数或字符串。.

您可以在这里找到辅助方法的完整列表。

向团队添加资源

由于包不知道您的应用程序将有哪些资源和资源类型,因此需要手动处理。以下是添加资源共享的步骤。

首先,在您的应用程序中,将 IsResource 特性添加到资源实体 (作为资源的模型类)

<?php
...
use Codelab\Teams\Traits\IsResource;

class Task extends Model {
    IsResource;
    ...
}

其次,在自定义团队类中扩展基本 Codelab\Teams\Models\Team 类。

<?php
...
use Codelab\Teams\Models\Team;

class CustomTeam extends Team {
    ...
}

要让包知道新的自定义类,更改配置文件中的 team 属性。

<?php

return [
    'team' => Your\Custom\Team::class
];

然后,在新的自定义团队类中使用 morphByResource 方法在资源和团队之间创建关系。

<?php
...
use Codelab\Teams\Models\Team;

class CustomTeam extends Team {
    /**
     * Defines a has many tasks relationship on team.
     * 
     * @return MorphToMany
     */
    public function tasks(): MorphToMany
    {
        return $this->morphedByResource(Task::class);
    }
}

一旦完成所有这些,您就可以使用您刚刚创建的关系方法向团队对象添加资源。

$team->tasks()->create([...]);
$team->tasks()->attach($task);

术语表

辅助方法

在具有团队的对象上

createTeam([
    'name' => $name // required, 
    'slug' => $slug // optional, 
    'description' => $description // optional, 
    'status' => $status // either 1 (active) or 2 (inactive) defaults to 1,
]): Team
teams(): MorphMany
findTeam(
    $id // required.
): Team
deleteTeam(
    $id // required
): void
hasTeam(
    $id //required
): bool

在团队对象上

members(): MorphToMany
addMember(
    $id // member id, required.
): void
removeMember(
    $id // member id, required
): void
hasMember(
    $id // member id, required
): bool

在成员对象上

memberTeams(): MorphToMany
joinTeam(
    $id // team id, required.
): void
exitTeam(
    $id // team id, required.
): void
isMemberOf(
    $id // team id, required.
): bool

在资源对象上

teams(): MorphToMany

感谢您查看这个包,如果您喜欢,请不要忘记分享和🌟。