marks / acl
Laravel 4.x 的 ACL 服务
Requires
- php: >=5.3.0
- illuminate/support: 4.*
This package is not auto-updated.
Last update: 2024-09-24 07:37:04 UTC
README
#Laravel 多区域 ACL
此插件允许您分离应用程序不同区域用户的访问权限。此 ACL 插件面向数据库。例如,您有一个具有管理部分和前端部分的应用程序,但您需要这两个部分分别由 ACL 控制。我的插件可以非常容易地实现这一点。
##安装
composer.phar require marks/acl dev-master
##配置 在配置目录中创建一个名为 acl.php 的新文件,并将此代码段放入此文件。
<?php
//acl configuration file
return array(
"max_groups" => 4, //maximum groups in one zone
"zones"=>array("default"), //array of zones that you want to use
"default_zone"=>"default", //default zone (have to be in array of zones)
//zone specific configuration
"default" => array(
"model" => "User", //model
"col" => "acl_group_id", //colum that specifies relation between model and acl group
),
);
##设置 首先,您需要将
'Marks\Acl\AclServiceProvider'
添加到您的应用程序服务提供者中,并将
"Acl" => 'Marks\Acl\Facades\Acl'
添加到您的应用程序外观中。这允许您在应用程序中使用 Acl 外观。
此插件通过命令管理,因此您必须发出以下命令来设置插件
php artisan acl:setup //this command run database migrations and controller scanning
php artisan acl:seed //this command seeds the database and allows default group to perform any action
##控制器扫描 您不必担心您已添加哪些控制器和路由,并考虑将它们添加到 ACL 插件中。每次添加新的控制器或路由时,只需发出以下命令
php artisan acl:scan
##用户识别 然后,您在 filters.php 中创建一个过滤器,并使用以下示例代码将其添加到您的路由中。
Route::filter("acl", function(){
//this passes the user acl group id into plugin
Acl::default()->identify(Auth::user()->acl_group_id);
//if user is allowed returns (bool) true if not returns (bool) false
if(!Acl::allowed()){
//here goes your code for error exception
App::abort(403, 'Unauthorized action.');
}
});
##多区域 如果您想使用具有多个区域的插件,只需将新区域添加到 acl.php 配置文件中,并像这样使用它
Acl::zonename()->identify($id);
##设置权限 首先,您需要创建一种显示与操作(acos)相关的组(aros)权限的形式。为此,您可以使用以下命令
#####列出所有资源(acos)
Acl::getResources();
#####列出区域中的所有组(aros)
Acl::zonename()->getGroups();
要检查组是否有权执行操作,您可以使用此方法
Acl::zonename()->getPermission((int) $aco_id, (int) $aro_id);
要为特定的 aco 和 aro 设置权限,您可以使用此方法
Acl::zonename()->set((int) $aco_id, (int) $aro_id, (bool) $allowed);
##ACL 用户组 此 ACL 插件面向组,因此每个 ACL 检查都在组级别执行。这意味着每个用户都必须在 ACL 组中,并且插件不关心用户 ID,但它关心 acl_group_id。以下示例中 zonename 将是您的区域名称,例如 default。
###添加新组
Acl::zonename()->addGroup((string) $zonename, (bool) $isdefault);
###编辑现有组
Acl::zonename()->editGroup((int) $groupID, array("name"=> (string) $zonename, "default"=> (bool) $isdefault));
###删除组
Acl::zonename()->deleteGroup((int) $groupID);
###列出所有组
Acl::zonename()->getGroups();
##区域 这些方法允许您获取所有区域列表和获取默认区域名称。
###列出所有区域 方法返回所有区域名称的数组。
Acl::getZones();
###获取默认区域名称 方法返回默认区域名称作为字符串。
Acl::getDefaultZone();