2014-11-11 3 views
0

슈퍼 유저가 특정 영역에 액세스 할 수있는 영역을 말할 수있는 섹션을 만드는 중입니다. 사용자가 액세스 할 수없는 경우 링크가 표시되지 않는 문제가 있습니다.laravel ACL 섹션 만들기

예를 들어 : 최고 관리자이며 그 사용자가 모든 것을 액세스 할 수있는 사용자가 있습니다. 따라서 새 사용자가 생성되고 사용자는 일반 사용자라고하며 일반 사용자는 사용 가능하고 편집 만 할 수있는 그룹 목록에만 액세스 할 수 있지만 새 그룹을 삭제하거나 추가 할 수는 없습니다.

이 예에서는 삭제하고 그룹 링크를 추가하지 않아도됩니다.

코드가 상당히 많아서 관련성이 있다고 생각하는 부분을 넣었습니다. 다른 것을 올려 주시면 알려주세요.

이이이이

index.blade.php 내 그룹 내 필터

Route::filter("auth", function() { 
if (Auth::guest()) { 
return Redirect::route("user/login"); 
} else { 
foreach (Auth::user()->groups as $group) { 
    foreach ($group->resources as $resource) { 
    $current = Route::currentRouteName(); 

    if ($resource->name === $current) { 
     return; 
    } 
    } 
} 

return Redirect::route("user/login"); 
} 
}); 

Route::filter("auth.basic", function() { 
    return Auth::basic(); 
}); 

내 도우미

<?php 

if (!function_exists("allowed")) 
{ 
function allowed($route) 
{ 
    if (Auth::check()) 
    { 
     foreach (Auth::user()->groups as $group) 
     { 
      foreach ($group->resources as $resource) 
      { 
       if ($resource->name == $route) 
       { 
        return true; 
       } 
      } 
     } 
    } 
    return false; 
} 
} 

내 routes.php

Route::group(["before" => "guest"], function() { 
$resources = Resource::where("secure", "=", false)->get(); 

foreach ($resources as $resource) { 
    Route::any($resource->pattern, [ 
    "as" => $resource->name, 
    "uses" => $resource->target 
    ]); 
} 
}); 

Route::group(["before" => "auth"], function() { 
$resources = Resource::where("secure", "=", true)->get(); 

foreach ($resources as $resource) { 
    Route::any($resource->pattern, [ 
    "as" => $resource->name, 
    "uses" => $resource->target 
    ]); 
} 
}); 

입니다

@extends("layout") 
@section("content") 
@if(count($groups)) 
    <table> 
     <tr> 
      <th>name</th> 
      <th>&nbsp;</th> 
     </tr> 
     @foreach($groups as $group) 
      <tr> 
       <td> 
        {{ $group->name }} 
       </td> 
       <td> 
        <a href="{{ URL::route("group/edit") }}?id={{ $group->id }}">edit</a> 
        <a href="{{ URL::route("group/delete") }}?id={{ $group->id }}" class="confirm" data-confirm="Are you sure you want to delete this group?">delete</a> 
       </td> 
      </tr> 
     @endforeach 
    </table> 
@else 
    <p>There are no groups.</p> 
@endif 
<a href="{{ URL::route("group/add") }}">add group</a> 
@stop 
@section("footer") 
@parent 
<script src="/js/jquery.js"></script> 
<script src="/js/layout.js"></script> 
@stop 

답변

1

allowed 도우미의 $route 매개 변수가 Laravel Route 인스턴스입니까? 또는 단순히 현재 URL?

if (allowed(Request::url())) { 
    Route::group(["before" => "auth"], function() { 
    $resources = Resource::where("secure", "=", true)->get(); 

    foreach ($resources as $resource) { 
     Route::any($resource->pattern, [ 
      "as" => $resource->name, 
      "uses" => $resource->target 
     ]); 
    } 
    }); 
} 
+0

허용에 $ 경로가 Laravel 루트 인스턴스 – Niks

+0

@Niks은 다음과 같습니다 : 저도 같은 문제에 봉착

는 & 난에서 그것의 생각 라우팅이되면 당신은 현재 경로의 인스턴스를 얻을 수 있습니다 이미 함. 따라서 URL에 허용 된 경로를 확인하거나 Laravel 경로 인스턴스를 수동으로 만들어야합니다. – mauvm

0

하는 기본 필터를 복원 Laravel 4.2 시도를 사용하는 경우와 그것을 작동합니다 : 후자에

, 당신은 routes.php에서 같은 것을 할 수 있습니다.

Route::filter('auth', function()