maximkou/laravel-simple-voters

类似于Symfony的基于行的访问检查投票系统。

0.2 2017-05-16 06:55 UTC

This package is auto-updated.

Last update: 2024-09-17 09:38:31 UTC


README

Latest Stable Version License

此包提供了类似Symfony Security Voters的系统,允许您检查基于对象的安全性。

使用示例

检查当前用户是否可以编辑特定的帖子

is_granted('edit', $post) // return true or false
// or using Facade
Access::isGranted('edit', $post)

检查特定用户是否可以读取或写入特定帖子的信息

is_granted(['read', 'write'], $post, $user) // return true or false
// or using Facade
Access::isGranted(['read', 'write'], $post, $user)

安装

使用composer依赖

composer require maximkou/laravel-simple-voters ^0.1

将服务提供者添加到您的config/app.php

'providers' => [
    Maximkou\SimpleVoters\SimpleVotersServiceProvider::class,

将外观别名添加到您的config/app.php(可选)

'aliases' => [
    'Access' => Maximkou\SimpleVoters\Facades\Access::class,

发布包配置(可选)

php artisan vendor:publish --provider="Maximkou\SimpleVoters\SimpleVotersServiceProvider"

配置

// file config/voters.php
/**
 * Available out of the box strategies: affirmative, unanimous, consensus.
 * You can use custom voting strategy by registering service with name 'simple_voters.strategies.{strategy_name}'
 */
'strategy' => 'unanimous',

/**
 * If pro and contra votes count is equal, or all voters abstain, used this value
 */
'is_granted_by_default' => true,

/**
 * List of Voter classes.
 */
'voters' => [
    // put here your voters classes
],

创建投票者

投票者必须实现Maximkou\SimpleVoters\Contracts\Voter接口或扩展Maximkou\SimpleVoters\AbstractVoter类。然后添加您的投票者到配置中。

示例

class PostVoter extends AbstractVoter
{
    protected function supports($action, $object)
    {
        return in_array('action', ['edit', 'remove']) && $object instanceOf Post;
    }
    
    protected function isGranted($action, $object, $user)
    {
        $checker = "can".ucfirst($action);
        
        return $this->$checker($object, $user);
    }
    
    private function canEdit($object, $user)
    {
        return $object->user_id = $user->id;
    }
    
    private function canRemove($object, $user)
    {
        return $object->user_id = $user->id;
    }
}

在非Laravel环境中使用

在非Laravel环境中使用,您只需要创建自定义的AuthenticatedUserResolver,用于解析当前用户实例。

示例

use Maximkou\SimpleVoters\Services\Access;
use Maximkou\SimpleVoters\GrantStrategies;

$accessChecker = new Access(
    new GrantStrategies\Affirmative($listVoters), // choose voting strategy
    new MyAuthUserResolver() // pass your user resolver
);

$accessChecker->isGranted('action', $object); // true/false?

许可证

此包是开源软件,受MIT许可证许可。