orbitale/permissions-bundle

使用新的“permissions”指令作为单一投票者

安装: 59

依赖项: 0

建议者: 0

安全性: 0

星标: 18

关注者: 4

分支: 1

开放问题: 0

类型:symfony-bundle

v0.1.1 2017-12-23 20:12 UTC

This package is auto-updated.

Last update: 2024-09-15 02:01:11 UTC


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