fschwaiger / laravel-ldap
为Laravel 5提供简单的LDAP集成。附带基于文件的ACL。
Requires
- laravel/framework: ^5.3
- symfony/ldap: ^3.2
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
并替换用户提供者驱动eloquent
为ldap
'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