shroomok/discord-permission

此包已被废弃且不再维护。未建议替代包。

根据 Discord 服务器成员角色设置角色和权限

v1.x-dev 2023-03-27 02:17 UTC

This package is auto-updated.

Last update: 2024-06-27 05:01:34 UTC


README

Discord Permission for Laravel

此包根据 Discord 服务器中用户的角色自动授予 Laravel 用户的权限。

要求

安装

composer require shroomok/discord-permission

.env

DISCORD_GUILD=<ID OF YOUR DISCORD GUILD (SERVER)>

配置 Discord 角色与 Laravel 权限/角色的映射:config/discord_permission.php

php artisan vendor:publish --provider="Shroomok\DiscordPermission\DiscordPermissionServiceProvider" --tag="config"
'roles_map' => [
        [
            'discord_role' => 'moderator',
            'laravel_roles' => ['moderator', 'editor']
        ],
        [
            'discord_role' => 'donator',
            'laravel_permissions' => ['access premium content']
        ]
    ]

最后,在 app/Providers/AppServiceProvider.php 中注册 DiscordClient 依赖

namespace App\Providers;
...
use RestCord\DiscordClient;

class AppServiceProvider extends ServiceProvider
{
      ...
      
      public function register()
      {
          $this->app->singleton(DiscordClient::class, function(){
              // token definitely better to retrieve from config like: 'token' => config('services.discord.bot_token')
              return new DiscordClient(['token' => 'DISCORD BOT TOKEN']);
          });
      }
      
      ...
}

队列事件监听器

同步发生在 SyncDiscordRoles 监听器中,该监听器是可队列的。如果您的 QUEUE_CONNECTION 不是 sync,请记住启动工作进程 php artisan queue:work

用例

例如,您正在运行基于 Laravel 框架的 Web 应用程序。同时,您还有一个与该网站相关的 Discord 社区。您已经实现了通过 Discord OAuth 的登录。拥有 Discord 账户的用户可以登录到您的 Web 应用程序。现在您想与您的社区成员分享一些特别的东西。但仅限于特定用户。或者这些用户已经是您的 Discord 公会中的管理员,并且最好在 Laravel 应用程序中授予他们相同的权限...在这个时候,DiscordPermission 包可以让您的生活更加轻松!

工作原理

它通过 restcord/restcord 与 Discord API 交互,以获取有关特定公会、成员及其角色的数据。

通过 spatie/laravel-permissions 在 Laravel 应用程序中对角色和权限进行操作。

主要逻辑包括 DiscordLoginSuccess 事件和 SyncDiscordRoles 监听器。

DiscordLoginSuccess 事件应在用户完成通过 Discord 的身份验证并应用程序检索到 discord_id 时触发。

SyncDiscordRoles 监听器与 Discord API 交互,检查传入用户的角色,然后分配(或不分配)Laravel 角色和/或权限。它实现了 ShouldQueue 接口,以便可以作为后台工作进程运行,不会在登录时压倒用户。

用户对象可以是任何具有 assignRole(string $role)givePermissionTo(string $permission) 方法的对象。

基本上,它必须使用来自 spatie/laravel-permissions 包的 'HasRoles' 特性。

鸣谢

Shroomok 用爱心构建

Buy Me A Coffee

和平 🍄