dainsys/timy2

将用户时间跟踪功能添加到Laravel 7、Livewire和Bootstrap 4

3.4.2 2021-06-10 04:17 UTC

README

将用户时间跟踪功能添加到Laravel 7、Livewire和Bootstrap 4。

安装

  1. 使用composer安装: composer require dainsys/timy2

    可选:Laravel应自动发现此包。然而,您可以在config.app文件中的providers数组中注册它。

        'providers' => [
            Dainsys\Timy\TimyServiceProvider::class,
        ]

    您可能想要发布配置文件: php artisan vendor:publish --tag=timy-config 以更改默认配置。请注意创建默认处置选项。

  2. 接下来,您可能想要使用命令 php artisan migrate 运行迁移。

    您也可以使用 php artisan vendor:publish --tag=tiy-migrations 发布迁移,并在迁移之前更新它们。

  3. use Dainsys\Timy\Timeable 特性添加到您的 User 模型。
    use Dainsys\Timy\Timeable;
    class User extends Authenticatable
    {
        use Timeable;
    }

    此包依赖于 laravel/ui 来处理认证。请遵循其安装指南 认证。我们建议运行以下命令: php artisan ui --auth vue

  4. 按照 laravel/livewire 的要求,确保您更新了布局视图。
        @livewireStyles
    </head>
    <body>
        ...
        @livewireScripts
        @stack('scripts')
    </body>
    </html>
  5. 确保在 config.app 文件中将 App\Providers\BroadcastServiceProvider::class 取消注释。
  6. 接下来,将以下路由粘贴到您的 routes\channels.php 文件中
    Broadcast::channel('Timy.User.{id}', function ($user, $id) {
        return (int) $user->id == (int) $id;
    });
    
    Broadcast::channel('Timy.Admin', function ($user) {
        return \Illuminate\Support\Facades\Gate::allows(config('timy.roles.admin'));
    });
  7. 在检查登录用户后,将timy菜单包含在主导航栏中: @include('timy::_timy-menu')

    或者,您可以将链接到以下端点:用户:URL=/timy/user,名称=user_dashboard,网关(blade @can 指令)=timy-user 管理用户:URL=/timy/admin,名称=admin_dashboard,网关(blade @can 指令)=timy-admin 超级管理员用户:URL=/timy/super_admin,名称=supepr_admin_dashboard,网关(blade @can 指令)=timy-super-admin

  8. 接下来,在.env文件中定义超级用户,通过提供其在变量TIMY_SUPER_USER_EMAIL=中的电子邮件来定义。此用户将具有大量控制应用程序的权限。
  9. 接下来,从Pusher 获取您的凭据,并使用它们在.env文件中定义以下变量。请确保您已将 BROADCAST_DRIVER 变量设置为 pusher
    BROADCAST_DRIVER=pusher
    PUSHER_APP_ID=
    PUSHER_APP_KEY=
    PUSHER_APP_SECRET=
    PUSHER_APP_CLUSTER=
    
    MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
    MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
  10. 更新您的 package.json 文件,包括以下依赖项
            "laravel-echo": "^1.8.0",
            "pusher-js": "^6.0.3",
  11. 在您的 resources/js/bootstrap.js 中取消注释 Laravel Echo 部分。
    import Echo from 'laravel-echo';
    
    window.Pusher = require('pusher-js');
    
    window.Echo = new Echo({
        broadcaster: 'pusher',
        key: process.env.MIX_PUSHER_APP_KEY,
        cluster: process.env.MIX_PUSHER_APP_CLUSTER,
        forceTLS: true
    });
  12. 然后安装前端依赖项并编译: npm install && npm run dev
  13. 可选:此包包括一个 artisan 命令,每5分钟运行一次以检查用户的IP是否仍然活跃。默认情况下,它是禁用的:要激活它,请执行以下操作
    1. 确保您的服务器正在运行Laravel文档中建议的 cron job,请参阅调度,启动调度会话: * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
    2. config\timy.php 文件中将 with_scheduled_commands 变量设置为 true: 'with_scheduled_commands' => env('TIMY_WITH_SCHEDULED_COMMANDS', true)

功能

  • 认证用户是此包正常工作的前提。我们利用了 laravel/ui 包。
  • 用户和管理员应分配有效的角色。
  • 当会话开始时,所有之前打开的计时器都会关闭,并打开一个新的计时器。
  • 只有超级管理员可以管理角色。
  • 管理员控制器受保护,并且只为分配了 timy-admin 角色的用户工作。
  • 在页面加载时
    • 如果用户为特定处置运行了计时器,则在关闭该计时器后,将使用相同的处置启动一个新的计时器。
    • 即使没有正在运行的计时器,也会使用之前的设置在页面刷新时启动一个新的计时器。
    • 如果之前的逻辑都失败了,默认会使用配置中设置的处置来启动一个新的计时器。
  • 当用户更改处置下拉菜单(Vue 组件)时,会创建一个新的计时器,并关闭之前的所有计时器。
  • 当用户更改他们的处置时,管理员仪表板会动态更新。
  • 当管理员更新特定用户的处置时,用户界面会更新,并且用户会收到提醒。

API 端点

  • GET 端点 /timy/api/timers_filtered 或路由 route('timy.timers_filtered') 返回一个包含所有计时器的 Json 格式资源,这些计时器由查询字符串进行过滤。以下 GET 变量允许您过滤列表
    • disposition=value 将仅返回名称包含给定值的 disposition 的计时器。
    • user=value 将仅返回名称包含给定值的 user 的计时器。
    • from_date=date 将仅返回 start_date 更新或等于给定日期的计时器。
    • to_date=date 将仅返回 start_date 更旧或等于给定日期的计时器。
    • payable=true 将仅返回被标记为 payabledisposition 的计时器。
    • invoiceable=true 将仅返回被标记为 invoiceabledisposition 的计时器。
    • running=true 将仅返回 finished_at 字段为 null 的计时器,这代表当前正在运行的计时器。
  • 访问 GET 路由 /timy/api/get_open_timer_hours 或路由 route('timy.getOpenTimersHours') 来获取当前用户的打开计时器的当前小时数。非常适合显示实时更新,计算小时数,而不实际关闭当前计时器。