marks/acl

Laravel 4.x 的 ACL 服务

dev-master 2016-06-03 17:45 UTC

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();