Web应用中间件

4.0.0 2024-05-23 17:41 UTC

This package is auto-updated.

Last update: 2024-09-23 18:35:55 UTC


README

安装

需求

  • PHP 8.2+
  • Laravel 11.0+

通过Composer命令安装组件

composer require waltersilvacruz/secorphp

Laravel旧版本兼容性

对于Laravel的旧版本(版本7,8,9或10),请使用SECORPHP的3版本

composer require waltersilvacruz/secorphp:^3

配置

*ATENÇÃO*: este tutorial de configuração é específico para a versão 4 do SECORPHP, 
que é compatível com a versão 11 ou superior do Laravel. Para versões anteriores, é 
recomendado utilizar as instruções no README da versão.

打开bootstrap/providers.php文件并在提供者列表中添加

TCEMT\Providers\SecorphpServiceProvider::class

bootstrap/app.php文件中添加到别名列表

'Secorphp'  => TCEMT\Facades\Secorphp::class

// exemplo:
...
->withMiddleware(function (Middleware $middleware) {
    $middleware->alias([
        'Secorphp'  => TCEMT\Facades\Secorphp::class
    ]);
})
...

清除配置缓存

php artisan config:cache

执行以下命令以创建配置文件

php artisan vendor:publish --tag="secorphp"

编辑.env文件并添加组件安全性的基本配置

# configurações de autenticação
AUTH_LOGIN_ROUTE=login # rota da página de logon na aplicação
AUTH_LOGIN_SUCCESS_ROUTE=home # rota de redirecionamento  quando o logon for bem sucedido
AUTH_USER_MODEL=App\User # modelo do usuário
AUTH_USER_LOGIN_FIELD=logon # campo referente ao logon do usuário

#configuração de autorização do Secorp
SECORPHP_ENVIRONMENT=production/development # define o ambiente
SECORPHP_API_BASE_URL=https://am.tce.mt.gov.br # url base do API Manager
SECORPHP_API_PROD_CONTEXT=/secorp/authorization/producao #contexto no ambiente de produção
SECORPHP_API_DEV_CONTEXT=/secorp/authorization/desenvolvimento # contexto no ambiente de desenvolvimento
SECORPHP_API_CONSUMER_KEY=chave # chave pública do sistema (fornecida pelo API Manager)
SECORPHP_API_CONSUMER_SECRET=chave # chave secreta do sistema (fornecida pelo API Manager)
SECORPHP_ENABLED=true/false # habilita ou desabilita a verificação de segurança
SECORPHP_APP=app_name # nome da aplicação cadastrada no Secorp
SECORPHP_CACHE_ENABLED=true/false # habilita ou desabilita o cache das credenciais de acesso
SECORPHP_CACHE_TIMEOUT=30 # tempo em minutos

再次清除配置缓存

php artisan config:cache

编辑app/Http/routes.php文件并使用新的控制器处理认证过程。示例

Route::post('/login', '\TCEMT\Http\Controllers\AuthLdapController@autentica')->name('autentica');

执行以下命令

php artisan clear-compiled && composer dumpautoload && php artisan optimize

使用方法

在控制器中

使用Secorphp外观在控制器中检查用户权限。方法Secorphp::allow($recurso[,$acao])负责进行验证并返回真或假。第一个参数是资源,第二个参数是动作(可选)

<?php
...
use Secorphp;

class MeuController extends Controller {

    public function index() {
        // verifica acesso do usuário que está logado ao recurso
        if(Secorphp::allow('USUARIO') {
            // tem acesso ao recurso "USUARIO"...
        }

        // verifica acesso do usuário que está logado à uma ação
        if(Secorphp::allow('USUARIO', 'PODE_EDITAR') {
            // tem acesso à ação "EDITAR" no recurso "USUARIO" ...
        }
    }
}

默认情况下,Secorphp检查已认证用户的访问权限。如果您需要检查其他用户的权限,可以这样做

<?php
...
use Secorphp;

class MeuController extends Controller {

    public function index() {
        // ou utilize o método user()
        if(Secorphp::user('mary')->allow('USUARIO') {
            // Mary tem acesso ao recurso "USUARIO"...
        }
    }
}

在Blade模板中使用

Secorphp提供了两个指令用于权限验证:@recurso@if_recurso@acao@if_acao。请看以下示例

<h1>Pode acessar video?</h1>
@if_recurso("VIDEO")
<strong>Pode sim!</strong>
@else
<strong>ACESSO NEGADO!!</strong>
@endif_recurso

<h1>Pode incluir materia?</h1>
@if_acao("MATERIA", "PODE_INCLUIR")
<strong>Claro que pode!</strong>
@else
<strong>ACESSO NEGADO!!</strong>
@endif_acao

<button type="submit" @acao("MATERIA","PODE_INCLUIR")>Incluir</button>
<button type="button" @recurso("WEBDISCO")>Ir para webdisco</button>

路由(routes)验证

可以将应用程序的路由映射到Secorp系统的资源和工作流。配置在config/secorphp.php文件中。以下是一个映射示例

'secorphp_rules' => [
    'home' => ['recurso' => 'HOME'],
    'dashboard.*' => ['recurso' => 'DASHBOARD'],
    'usuario.index' => ['recurso' => 'USUARIO', 'acao' => 'PODE_ACESSAR'],
    'usuario.incluir' => ['recurso' => 'USUARIO', 'acao' => 'PODE_INCLUIR'],
    'usuario.editar' => ['recurso' => 'USUARIO', 'acao' => 'PODE_ALTERAR'],
    'usuario.excluir' => ['recurso' => 'USUARIO', 'acao' => 'PODE_EXCLUIR']
],

如您所见,在路由映射中可以使用*

// a rota exata 'home' está mapeada para o recurso 'HOME' independente do usuário ter ou não acesso às ações do recurso
'home' => ['recurso' => 'HOME']

// todas as rotas que começam com 'dashboard.' estão mapeadas para o recurso 'DASHBOARD'
'dashboard.*' => ['recurso' => 'DASHBOARD'],