orbitale / permissions-bundle
使用新的“permissions”指令作为单一投票者
v0.1.1
2017-12-23 20:12 UTC
Requires
- php: ^5.5|^7.0
- symfony/config: ^3.0|^4.0
- symfony/dependency-injection: ^3.0|^4.0
- symfony/expression-language: ^3.0|^4.0
- symfony/http-kernel: ^3.0|^4.0
- symfony/security-bundle: ^3.0|^4.0
README
该包的目标是为Symfony添加基于ExpressionLanguage的简单权限,以依赖比角色更复杂但比创建投票者更轻量级的东西。
安装
-
使用Composer安装它
$ composer require orbitale/permissions-bundle
-
将包添加到您的内核中
<?php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new Orbitale\Bundle\PermissionsBundle\PermissionsBundle(), ]; return $bundles; } }
-
设置您所需的权限
# app/config/security.yml permissions: rules: ADMIN_EDIT: 'user and user.getStatus() === constant("AppBundle\\Entity\\User::STATUS_ADMIN")' SUBSCRIBE: 'user and user.isMemberOfTheTeam()' CHUCK_NORRIS: 'user and user.getUsername() === "Chuck Norris"'
-
在控制器中使用它们
<?php namespace AppBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; class DefaultController extends Controller { public function badassAction() { $this->denyAccessUnlessGranted('CHUCK_NORRIS'); // ... } }
配置参考
permissions: defaults: # Variables to add to ExpressionLanguage, for easier access if you need expression_variables: [] # Will be added to all not already set "supports" attributes supports: null rules: # Full prototype # Key names *must* be uppercase PERMISSION_KEY_NAME: supports: null on_vote: null # Required # Allow expression with a single string, if you don't care of "supports": PERMISSION_KEY_NAME: 'on_vote expression'
真实示例
permissions: defaults: expression_variables: user_class: AppBundle\Entity\User post_class: AppBundle\Entity\Post supports: 'instanceof(user, user_class)' rules: ADMIN: 'user.isAdmin()' EDIT_POST: supports: 'instanceof(user, user_class) and instanceof(subject, post_class)' on_vote: 'user.isAdmin() and subject.getAuthor().getId() === user.getId()'