@@ -430,6 +430,13 @@ private function authWithLdap(Request $request, bool $create = false)
430
430
$ objectguid = bin2hex ($ ldapUser [$ guidColumn ]);
431
431
432
432
$ userGroups = $ ldapUser ['memberof ' ] ?? [];
433
+ if (is_string ($ userGroups )) {
434
+ $ userGroups = [$ userGroups ];
435
+ }
436
+ $ userGroups = array_map (function ($ item ) {
437
+ // Convert CN=a,OU=b,DC=A,DC=B format to a
438
+ return explode (', ' , explode ('= ' , $ item )[1 ])[0 ];
439
+ }, $ userGroups );
433
440
434
441
$ user = User::where ('objectguid ' , $ objectguid )->first ();
435
442
@@ -490,8 +497,8 @@ private function authWithLdap(Request $request, bool $create = false)
490
497
}
491
498
492
499
RoleUser::where ('user_id ' , $ user ->id )->where ('type ' , 'ldap ' )->delete ();
493
- if (isset ($ ldapUser [ ' memberof ' ]) ) {
494
- foreach ($ ldapUser [ ' memberof ' ] as $ row ) {
500
+ if (isset ($ userGroups ) && is_array ( $ userGroups ) && count ( $ userGroups ) > 0 ) {
501
+ foreach ($ userGroups as $ row ) {
495
502
RoleMapping::where ('group_id ' , md5 ($ row ))->get ()->map (function ($ item ) use ($ user ) {
496
503
RoleUser::firstOrCreate ([
497
504
'user_id ' => $ user ->id ,
@@ -516,7 +523,9 @@ private function authWithLdap(Request $request, bool $create = false)
516
523
$ keys = [];
517
524
foreach ($ extensionWithLdap as $ extension ) {
518
525
$ extensionJson = getExtensionJson ($ extension ->name );
519
- $ extensionServers = $ extension ->servers ()->get ()->toArray ();
526
+ $ extensionServers = $ extension ->servers ()->get ()->filter (function ($ server ) use ($ user ) {
527
+ return Permission::can ($ user ->id , 'server ' , 'id ' , $ server ->id );
528
+ })->toArray ();
520
529
foreach ($ extensionServers as $ server ) {
521
530
if (! isset ($ extensionJson ['ldap_support_fields ' ])) {
522
531
$ keys [$ server ['id ' ]] = [
@@ -534,7 +543,9 @@ private function authWithLdap(Request $request, bool $create = false)
534
543
...Server::where ('ip_address ' , trim (env ('LDAP_HOST ' )))->get (),
535
544
];
536
545
// Check if server list is unique by id
537
- $ serverList = collect ($ serverList )->unique ('id ' )->values ();
546
+ $ serverList = collect ($ serverList )->filter (function ($ server ) use ($ user ) {
547
+ return Permission::can ($ user ->id , 'server ' , 'id ' , $ server ['id ' ]);
548
+ })->unique ('id ' )->values ();
538
549
539
550
foreach ($ serverList as $ server ) {
540
551
$ encKey = env ('APP_KEY ' ).$ user ->id .$ server ['id ' ];
0 commit comments