创建laravel ACL节

创建laravel ACL节,laravel,laravel-4,acl,Laravel,Laravel 4,Acl,我正忙着创建一个部分,超级管理员可以说什么用户可以访问特定的区域。 我遇到的问题是,如果用户无法访问链接,链接就不在那里 例如:我有一个超级管理员用户,该用户可以访问所有内容。因此,将创建一个新用户,该用户称为普通用户,普通用户只能访问可用的组列表,并且只能进行编辑,但不能删除或添加新组 因此,对于这个例子,我需要删除和添加组链接不存在 我有相当多的代码,所以我只提出我认为是相关的。 如果你还有什么需要我帮忙的,请告诉我 这是我的routes.php Route::group(["before"

我正忙着创建一个部分,超级管理员可以说什么用户可以访问特定的区域。 我遇到的问题是,如果用户无法访问链接,链接就不在那里

例如:我有一个超级管理员用户,该用户可以访问所有内容。因此,将创建一个新用户,该用户称为普通用户,普通用户只能访问可用的组列表,并且只能进行编辑,但不能删除或添加新组

因此,对于这个例子,我需要删除和添加组链接不存在

我有相当多的代码,所以我只提出我认为是相关的。 如果你还有什么需要我帮忙的,请告诉我

这是我的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
  ]);
}
});
这是我的助手

<?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;
}
}
这是我的组index.blade.php

@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   
@扩展(“布局”)
@第节(“内容”)
@如果(计数($组))
名称
@foreach($组作为$组)
{{$group->name}
@endforeach
@否则
没有组。

@恩迪夫 @停止 @节(“页脚”) @母公司 @停止
是否允许
助手中的
$route
参数为Laravel route实例?或者仅仅是当前的URL

对于后者,您可以在
routes.php中执行类似操作:

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
        ]);
    }
    });
}

如果您使用的是Laravel4.2,请尝试恢复默认过滤器,它应该可以工作

我也有同样的问题,我相信它来自:

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

允许的$route是Laravel路由instance@Niks:您只能在完成路由后获取当前路由实例。所以,您要么必须检查URL允许,要么必须手动创建一个Laravel路由实例。
Route::filter('auth', function()