maximkou / laravel-simple-voters
类似于Symfony的基于行的访问检查投票系统。
0.2
2017-05-16 06:55 UTC
Requires
- php: >=7.0
- illuminate/support: 5.0.x|5.1.x|5.2.x|5.3.x|5.4.x
Requires (Dev)
- mockery/mockery: ^0.9.9
- phpunit/phpunit: ^6.1
This package is auto-updated.
Last update: 2024-09-17 09:38:31 UTC
README
此包提供了类似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许可证许可。