<?php

namespace app\admin\attr;
use Attribute;

#[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)]
class Permission
{
    /**
     * 权限值
     */
    public $value;

    /**
     * 仅对方法生效!是否忽略权限要求
     */
    public $ignore;

    /**
     * 继承controller的权限, 例如controller设置了权限值'admin', 方法设置了权限值'create', 那么实际权限值为'admin.create'
     * 如果在controller上设为true,那么当方法没有设置该注解时,而且useMethodName设置为了true,会自动使用方法名作为继承值
     * 如果在controller上设为false,只使用控制器的权限值
     */
    public $inherit;

    /**
     * 仅对controller生效!
     * true: 权限值为空时使用方法名作为权限值
     * false: 权限值为空时,使用控制器名小写作为权限值
     * @see \InvalidArgumentException
     */
    public $useMethodName;

    /**
     * __construct
     *
     * @param string $value 权限值
     * @param bool $ignore 仅对方法生效!是否忽略权限要求
     * @param bool $name 继承controller的权限, 例如controller设置了权限值'admin', 方法设置了权限值'create', 那么实际权限值为'admin.create'
     * @param bool $useMethodName 仅对controller生效!true: 权限值为空时使用方法名作为权限值; false: 权限值为空时,使用控制器名小写作为权限值
     * @see \InvalidArgumentException
     */
    public function __construct($value = '', $ignore = false, $inherit = true, $useMethodName = true)
    {
        $this->value = $value;
        $this->ignore = $ignore;
        $this->inherit = $inherit;
        $this->useMethodName = $useMethodName;
    }
}