memcrab/access

memCrab核心API的PHP访问库

1.4.0 2021-09-24 13:05 UTC

This package is auto-updated.

Last update: 2024-09-24 19:54:32 UTC


README

状态

Build Status Total Downloads Latest Stable Version Latest Unstable Version License composer.lock available

这是一个轻量级的PHP访问权限模块。

特性

  • 支持需要通过访问权限控制的服务、动作和角色
  • 支持访问组,可以将多个服务和动作组合起来,以便将所有这些访问权限赋予某个角色
  • 所有配置都是基于数组的,可以是简单的YAML文件
  • 允许您检查任何服务/动作的角色访问权限
  • 允许检查动作组的角色访问权限
  • 允许您获取当前角色可用的所有组
  • 允许通过角色、服务或访问组使用权限矩阵,允许您通过数组键简单地使用isset()检查任何权限。
  • 使用更新的pecl yaml-ext 2.0.0通过php 7.0进行高性能yaml解析
  • 严格标准编码,使用完整的参数和返回类型(php 7.1)
  • PSR-4自动加载兼容结构
  • 使用PHPUnit进行单元测试
  • 易于在任何框架中使用

安装

composer require memcrab/access

依赖

php扩展YAML

  • 对于Ubuntu/Debian
- apt-get update
- apt-get install php-pear
- apt-get install php-dev
- apt-get install php-xml php7.0-xml
- apt-get install libyaml-dev
- pecl channel-update pecl.php.net
- pecl install yaml-2.0.0
  • 对于OS X
- brew install php71 --with-pear
- brew install autoconf
- touch $(brew --prefix php71)/lib/php/.lock && chmod 0644 $(brew --prefix php71)/lib/php/.lock
- pecl install yaml-2.0.0

用法

  • 初始化Access: new memCrab\Access()
  • 加载规则: ->loadRules(array $rules)
    • $rules - 来自yaml文件的规则,例如
  • 运行检查: ->checkRights(string $service, string $action, string $userRole)
    • $service - 服务(或控制器)的名称
    • $action - 动作的名称
    • $userRole - 用户角色的名称

YAML配置示例

contentView:
  roles: [guest, user, admin]
  services:
    post: [get]
    product: [get]
    index: [get]
    catalog: [filter]
contentManage:
  roles: [admin]
  services: 
    post: [add, save, delete]
    product: [add, save, delete]

运行示例

require_once __DIR__ . "/../vendor/autoload.php";
use memCrab\Exceptions\FileException;
use memCrab\File\Yaml;
use memCrab\Access\Access;
use memCrab\Exception\AccessException;

try {
  $Yaml = new Yaml();
  $rules = $Yaml->load("config/rules.yaml", null)->getContent();
  
  $Access = new Access();
  $Access->loadRules($rules);
  
  if(!$Access->checkRights("post", "save", "admin")) throw AccessException("Access Denie.", 401);
    // do all your work
}
catch(AccessException $error){
  $Response = new \YourResponseClass();
  $Response->setErrorResponse($error);
}

$Response->sendHeaders();
$Response->sendContent();

MIT许可