malico/teams
Composer 安装命令:
composer require malico/teams
包简介
Team management functionality for Laravel applications.
关键字:
README 文档
README
A Laravel package that provides team management functionality for multi-tenant applications. Create teams, manage members, send invitations, and handle role-based permissions with a simple, extensible API.
Features
- Team Management: Create, update, and delete teams with owner relationships
- Member Management: Add and remove team members with role assignments
- Email Invitations: Send team invitations via email with signed URLs
- Role-Based Permissions: Flexible role system with custom permissions
- Personal Teams: Support for personal teams alongside collaborative teams
- Current Team Context: Switch between teams with user context management
- Event System: Events for all team operations (adding, removing, inviting, etc.)
- Multi-Stack Support: Livewire components included, Inertia.js support planned
- Authorization: Built-in policies and gates for secure operations
Requirements
- PHP 8.2 or higher
- Laravel 11.0 or 12.0
Installation
Install the package via Composer:
composer require malico/teams
Run the installation command to set up the package:
php artisan teams:install
Available installation options:
php artisan teams:install --stack=livewire # Install Livewire components php artisan teams:install --stack=inertia # Install Inertia.js components (coming soon) php artisan teams:install --override # Override auth files with team invitation support
The installation process will:
- Publish database migrations for teams, memberships, and invitations
- Copy model stubs (Team, TeamInvitation, Membership, User)
- Install the TeamsServiceProvider
- Copy policy and listener classes
- Set up frontend components for your chosen stack
- Add team routes to your application
Configuration
User Model Setup
Add the HasTeams trait to your User model:
<?php namespace App\Models; use Illuminate\Foundation\Auth\User as Authenticatable; use Malico\Teams\HasTeams; class User extends Authenticatable { use HasTeams; // Your existing model code... }
Team Roles Configuration
Define team roles in your TeamsServiceProvider or AppServiceProvider:
use Malico\Teams\Teams; public function boot(): void { Teams::role('admin', 'Administrator', [ 'team:read', 'team:update', 'team:invite-members', 'team:remove-members', ])->description('Team administrator with management privileges'); Teams::role('member', 'Member', [ 'team:read', ])->description('Standard team member with read access'); }
Note: Team owners automatically have all permissions (['*']) and don't need to be explicitly defined.
Usage
Creating Teams
use Malico\Teams\Contracts\CreatesTeams; // Create a regular team $team = app(CreatesTeams::class)->create($user, [ 'name' => 'Development Team', ]); // Create a personal team $personalTeam = app(CreatesTeams::class)->create($user, [ 'name' => 'John\'s Personal Team', 'personal_team' => true, ]);
Managing Team Members
use Malico\Teams\Contracts\InvitesTeamMembers; use Malico\Teams\Contracts\AcceptsTeamInvitations; use Malico\Teams\Contracts\DeclinesTeamInvitations; use Malico\Teams\Contracts\AddsTeamMembers; use Malico\Teams\Contracts\RemovesTeamMembers; // Invite a team member (sends email) app(InvitesTeamMembers::class)->invite($user, $team, 'developer@example.com', 'admin'); // Add a team member directly (if user exists) app(AddsTeamMembers::class)->add($teamOwner, $team, 'existing@example.com', 'member'); // Remove a team member app(RemovesTeamMembers::class)->remove($user, $team, $memberUser); // Accept an invitation app(AcceptsTeamInvitations::class)->accept($user, $teamInvitation); // Decline an invitation app(DeclinesTeamInvitations::class)->decline($user, $teamInvitation);
Updating Teams
use Malico\Teams\Contracts\UpdatesTeamNames; use Malico\Teams\Contracts\UpdatesTeamMemberRoles; // Update team name app(UpdatesTeamNames::class)->update($user, $team, ['name' => 'New Team Name']); // Update member role app(UpdatesTeamMemberRoles::class)->update($user, $team, $memberId, 'admin');
Checking Team Permissions
// Check if user belongs to a team if ($user->belongsToTeam($team)) { // User is a team member } // Check user's role on a team if ($user->hasTeamRole($team, 'admin')) { // User is an admin on this team } // Check specific permissions if ($user->hasTeamPermission($team, 'team:update')) { // User can update this team }
Working with Current Team
// Get user's current team $currentTeam = $user->currentTeam; // Switch to a different team $user->switchTeam($team); // Get all user's teams (owned + member) $teams = $user->allTeams(); // Get teams the user owns $ownedTeams = $user->ownedTeams; // Get teams where user is a member (not owner) $memberTeams = $user->teams; // Get user's personal team $personalTeam = $user->personalTeam(); // Check if team is user's current team if ($user->isCurrentTeam($team)) { // This is the active team }
Deleting Teams
use Malico\Teams\Contracts\DeletesTeams; // Delete a team (validates permissions first) app(DeletesTeams::class)->delete($user, $team);
Frontend Integration
This package supports Livewire with planned Inertia.js support. The installation command will scaffold the appropriate components.
Livewire Stack
After installation with --stack=livewire, you'll have:
-
Volt Components: Functional Livewire components in
resources/views/pages/teams/create.blade.php- Team creation formshow.blade.php- Team management interfacemembers.blade.php- Member managementaccept-invitation.blade.php- Invitation acceptanceindex.blade.php- Teams listing
-
Supporting Views:
components/teams/layout.blade.php- Team layout componentpartials/teams-heading.blade.php- Team navigation partialemails/team-invitation.blade.php- Email template
-
Routes: Team routes added to
routes/teams.php
Inertia.js Stack
Support for Inertia.js (React/Vue) components is planned for future releases.
Events
The package dispatches several events that you can listen to:
Team Events:
AddingTeam: Before creating a teamTeamCreated: After a team is createdTeamUpdated: After a team is updatedTeamDeleted: After a team is deleted
Member Events:
AddingTeamMember: Before adding a memberTeamMemberAdded: After a member is addedRemovingTeamMember: Before removing a memberTeamMemberRemoved: After a member is removedTeamMemberUpdated: After a member's role is updated
Invitation Events:
InvitingTeamMember: When sending an invitation
Authorization
The package includes authorization policies and gates:
- TeamPolicy: Controls team-level operations (view, update, delete, addTeamMember, etc.)
- Gates: Automatic policy registration for team operations
- Middleware: Built-in authorization checks in all actions
Customization
Override Default Actions
You can override any action in your TeamsServiceProvider:
use Malico\Teams\Teams; public function boot(): void { Teams::createTeamsUsing(CustomCreateTeam::class); Teams::inviteTeamMembersUsing(CustomInviteTeamMember::class); // ... other actions }
Customize Models
You can specify custom models:
use Malico\Teams\Teams; Teams::useUserModel(App\Models\CustomUser::class); Teams::useTeamModel(App\Models\CustomTeam::class); Teams::useTeamInvitationModel(App\Models\CustomTeamInvitation::class); Teams::useMembershipModel(App\Models\CustomMembership::class);
Configure Invitation Duration
Teams::invitationDurationDays(14); // Default is 7 days
Available Contracts
The package provides these contracts for dependency injection:
CreatesTeamsUpdatesTeamNamesDeletesTeamsValidatesTeamDeletionAddsTeamMembersRemovesTeamMembersInvitesTeamMembersAcceptsTeamInvitationsDeclinesTeamInvitationsUpdatesTeamMemberRoles
Testing
Run the package tests:
phpunit
Contributing
- Fork the repository
- Create a feature branch
- Write tests for your changes
- Ensure all tests pass
- Submit a pull request
Credits
This package is a fork of Laravel Jetstream teams functionality, extracted into a standalone package for use in any Laravel application.
Special thanks to the Laravel team and contributors for the original implementation.
License
The MIT License (MIT). Please see License File for more information.
malico/teams 适用场景与选型建议
malico/teams 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 29 次下载、GitHub Stars 达 6, 最近一次更新时间为 2025 年 08 月 29 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「laravel」 「collaboration」 「Teams」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 malico/teams 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 malico/teams 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 malico/teams 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
This is a PHP package for accessing Seafile Web API
User to Team associations for the Laravel Framework
A simple PHP package for sending messages to Microsoft Teams
Remove personal team forcing from Laravel Jetstream
This package provides a flexible way to add Role-based Permissions to Laravel
统计信息
- 总下载量: 29
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 6
- 点击次数: 28
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-08-29