PHPackages                             projectinfiniteme/security-request - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Security](/categories/security)
4. /
5. projectinfiniteme/security-request

ActiveLibrary[Security](/categories/security)

projectinfiniteme/security-request
==================================

Amondar Security Request

00PHP

Since Dec 16Pushed 1y ago1 watchersCompare

[ Source](https://github.com/projectinfiniteme/security-request)[ Packagist](https://packagist.org/packages/projectinfiniteme/security-request)[ RSS](/packages/projectinfiniteme-security-request/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

Amondar Security Request.
-------------------------

[](#amondar-security-request)

По любым вопросам образаться на e-mail - .
Пакет предназначен для изменения и расширения работы стандартныйх Laravel реквестов в защищенных секциях сайта.
!!! ВАЖНО!!! Для работы с Laravel начиная с версии 5.6 использовать теги - "**^2.0**"

Для установки
-------------

[](#для-установки)

```
"repositories": [
    {
        "url": "https://git.attractgroup.com/amondar/SecurityRequest.git",
        "type": "git"
    }
]
```

```
    "amondar/security-request": "^3.0"
```

Подключение
-----------

[](#подключение)

Подключите **SecurityRequest** трейт к своему реквесту или создайте обертку для CoreRequest, чтобы не подключать его постоянно. Пример реквеста с использованием нашего трейта. Обратите внимание, используентся стандартный REST подход при котором на каждый конечный урл вешается один пермишн.

ВАЖНО: Для более общих пермишнов используйте мидлверы и обратитесь к документации ларавел.
Для проверок во всех функциях доступны переменные:

```
    $this->action; //Массив дейсвия.
    $this->actionName; //Имя действия. Находится в ключе.
```

```
class CategoryRequest extends FormRequest
{
    use SecurityRequest;

    /**
     * Actions.
     *
     * @var array
     */
    protected $actions = [
        'view' => [
            'methods'    => [ 'GET' ],
            'permission' => 'default',
        ],
        'add'  => [
            'methods'    => [ 'POST' ],
            'permission' => 'default',
        ],
        'edit' => [
            'methods'    => [ 'PUT', 'PATCH' ],
            'permission' => 'default',
        ],
        'delete' => [
            'methods'    => [ 'DELETE' ],
            'permission' => 'default',
        ]
    ];

    /**
     * Rules array.
     *
     * @return array
     */
    public function rulesArray()
    {
        $rules = [
            'uri'        => 'required|alpha_dash|unique:categories',
            'is_active'  => 'sometimes|boolean',
        ];

        $this->addTranslatableFields($rules, [
            'name' => [ 'required', 'string', 'min:1', 'max:255' ]
        ]);

        return $rules;
    }

    public function messagesArray()
    {
        return [
            'uri.required'      => trans_db(app('translations'), 'validation-categories-uri-required', 'Uri is required field.'),
            'uri.unique'        => trans_db(app('translations'), 'validation-categories-uri-unique', 'Uri with this name already exists.'),
            'name_*.required'   => trans_db(app('translations'), 'validation-categories-name-required', 'Name is required.'),
            'name_*.min'        => trans_db(app('translations'), 'validation-categories-name-min', 'Name must be at least :min characters in length.', [ ':min' => 3 ]),
            'name_*.max'        => trans_db(app('translations'), 'validation-categories-name-max', 'Name must be maximum :max characters in length.', [ ':max' => 255 ]),
        ];
    }

    /**
     * @return array
     */
    protected function postActionMessages()
    {
        return $this->messagesArray();
    }

    /**
     * Get action rules
     *
     * @return array
     */
    protected function getAction()
    {
        return [ ];
    }

    /**
     * Post action rules
     *
     * @return array
     */
    protected function postAction()
    {
        return $this->rulesArray();
    }

    /**
     * Put action rules
     *
     * @return array
     */
    protected function putAction()
    {
        $rules = $this->rulesArray();
        $category_id = $this->route('category');
        $rules['uri'] = [ 'required','alpha_dash', Rule::unique('categories', 'uri')->ignore($category_id, '_id') ];

        return $rules;
    }

    /**
     * Delete action rules
     *
     * @return array
     */
    protected function deleteAction()
    {
        return [];
    }
}
```

Как вы моджете заметить реквест стал более читабельным. На каждый тип запросы можно построить свой независимый массив правил и сообщений для ответа на ошибки валидации.

**ВАЖНО**: Запросы типа PUT и PATCH обрабатываются в функциях с приставкой **put** - **putAction**

Пермишны и их возможности
-------------------------

[](#пермишны-и-их-возможности)

Для того чтобы использовать преимущество читабельности, но опустить проверку пермишнов через Laravel Gate Facade используется имя пермишна - **default**. Это говорит трейту, что на данном запросе не нужна проверка пермишна. Пример с пермишном:

```
'delete' => [
    'methods'    => [ 'DELETE' ],
    'permission' => 'change-log-delete',
],
```

Данный ключ выполнит проверку - **Auth::user()-&gt;can('change-log-delete')**. В случае, если пользователь не имеет права выполнять запрошенное дейсвие - будет возвращен ответ **403**

Возможности расширения
----------------------

[](#возможности-расширения)

Если необходимо описать на один и тот же типа запроса, например, **PUT**, несколько запросов с разным набором правил валидации : можно воспользоваться ключем - **route**

```
'edit'    => [
    'methods'    => [ 'PUT', 'PATCH' ],
    'route'      => 'projects/*/groups/*',
    'permission' => 'default',
],
'move-to' => [
    'methods'    => [ 'PUT', 'PATCH' ],
    'route'      => 'projects/*/groups/move',
    'permission' => 'group-task-actions',
],
```

В данном случае трейт проведет сравнение урла в реквесте при помощи стандартной функции Laravel:

```
$this->is('projects/*/groups/move')
```

В случае успеха данной проверки будет проверен и пермишн доступа для залогиненного юзера.

ВАЖНО: при появлении таких ключей где используется формулировка с **route** Правила именования функций для таких экшнов меняются. В данной ситуации экшны будут выглядеть так:

```
/**
* Put method rules apply.
*/
protected function putEditAction()
{
    return [];
}

/**
* Put method rules apply.
*/
protected function putMoveToAction()
{
    return [];
}
```

Для ввода дополнительных правил проверки в стандартной функции Laravel - **autorise** переопределите ее и не забудьте по умолчанию вернуть ответ parent функции.

```
/**
 * Determine if the user is authorized to make this request.
 *
 * @return bool
 */
public function authorize()
{
    $group_id = $this->route('group');
    $user = detectUser()->user;
    if (
        ! $this->project->isTeammates([ detectUser()->user ]) ||
        ($group_id && ! $this->project->groups->contains('id_task_group', $group_id)) ||
        ($this->actionName == 'edit' && $this->task_group_status_id == 2 && $user->cannot('group-begin')) ||
        ($this->actionName == 'edit' && $this->task_group_status_id == 3 && $user->cannot('group-close'))
    ) {
        return false;
    }

    return parent::authorize();
}
```

По любым вопросам образаться на e-mail -

###  Health Score

13

—

LowBetter than 1% of packages

Maintenance31

Infrequent updates — may be unmaintained

Popularity0

Limited adoption so far

Community4

Small or concentrated contributor base

Maturity16

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/199a6b02968163382f0d8103eccd5407ec7ca9c5042b3023f48d3f00d87af235?d=identicon)[projectinfinite](/maintainers/projectinfinite)

### Embed Badge

![Health badge](/badges/projectinfiniteme-security-request/health.svg)

```
[![Health](https://phpackages.com/badges/projectinfiniteme-security-request/health.svg)](https://phpackages.com/packages/projectinfiniteme-security-request)
```

###  Alternatives

[defuse/php-encryption

Secure PHP Encryption Library

3.9k162.4M214](/packages/defuse-php-encryption)[mews/purifier

Laravel 5/6/7/8/9/10 HtmlPurifier Package

2.0k16.7M113](/packages/mews-purifier)[robrichards/xmlseclibs

A PHP library for XML Security

41478.1M118](/packages/robrichards-xmlseclibs)[bjeavons/zxcvbn-php

Realistic password strength estimation PHP library based on Zxcvbn JS

87117.5M63](/packages/bjeavons-zxcvbn-php)[illuminate/encryption

The Illuminate Encryption package.

9229.7M280](/packages/illuminate-encryption)[paragonie/hidden-string

Encapsulate strings in an object to hide them from stack traces

7410.6M39](/packages/paragonie-hidden-string)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
