fschwaiger/laravel-ldap

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

为Laravel 5提供简单的LDAP集成。附带基于文件的ACL。

v1.0.3 2017-03-07 19:50 UTC

This package is not auto-updated.

Last update: 2023-10-09 09:24:12 UTC


README

此模块为Laravel的认证系统提供简单的用户提供者,连接到LDAP服务器,导入用户和组,然后在一个配置文件中将组标识符映射到权限角色。

此扩展最初是为Fachschaft Maschinenbau e.V.的一些网络服务编写的,但足够通用,可以用于各种其他项目。我的重点是尽量保持逻辑尽可能简单,这就是为什么我移除了所有不必要的属性和方法。

安装

首先,通过composer将包导入到您的Laravel项目中

composer require fschwaiger/laravel-ldap

其次,将以下行复制并粘贴到config/app.php中,以添加其服务提供者

Fschwaiger\Ldap\LdapServiceProvider::class,

最后,使用php artisan vendor:publish将配置文件和迁移发布到项目中。这将创建以下文件

config/ldap.php
config/privileges.php
database/migrations/2016_12_17_000000_extend_users_table.php
database/migrations/2016_12_17_100000_create_groups_table.php
database/migrations/2016_12_17_200000_create_group_user_table.php

集成

要告诉Laravel使用此模块提供用户,请访问config/auth.php并替换用户提供者驱动eloquentldap

'providers' => [
    'users' => [
        'driver' => 'ldap',
        'model' => App\User::class,
    ],
],

您的App\User类应继承自Fschwaiger\Ldap\User。同样适用于您的组模型,如果您选择扩展它。是否添加Notifiable特质取决于您。

namespace App;

use Fschwaiger\Ldap\User as LdapUser;

class User extends LdapUser;
{
    ...
}

要连接到您的目录服务器,编辑文件config/ldap.php以匹配您的设置。只需遵循配置文件中的说明即可。

最后,编辑您的.env文件以包含

LDAP_USERNAME=binduser
LDAP_PASSWORD=bindpass

如果您未修改默认的users表迁移,迁移应该直接工作。否则,请确保首先审查迁移更改。

php artisan migrate

设置完成后,以下命令应导入所有用户组。

php artisan ldap:import-groups

导入用户和组

以上设置下,登录现在应使用LDAP服务器而不是本地数据库进行用户认证。这将在用户首次成功登录时动态导入未知用户。请注意,导入用户不会自动导入组!这意味着每次您的组更改时,您都需要运行ldap:import-users

选项A:更改后手动导入,使用php artisan ldap:import-groups。这对于大多数静态目录结构来说足够好了。如果您的组经常更改,请查看选项B。

选项B:app/Console/Kernel.php中安排导入

/**
 * Define the application's command schedule.
 *
 * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
    $schedule->command('ldap:import-groups')->daily();
}

使用组权限授权操作

您在config/privileges.php中定义的权限将自动映射到授权网关,以便您可以在应用程序的所有部分中检查它们。

在代码中

Gate::authorize('privilege')
// or
$allowed = $user->can('privilege')

使用中间件

$this->middleware('can:privilege')
// or
Route::get('action', ['middleware' => 'can:privilege', 'uses' => 'MyController@action'])

在Blade文件中

@can('privilege')
    ...
@endcan