waltersilvacruz / secorphp
Web应用中间件
4.0.0
2024-05-23 17:41 UTC
Requires
- php: ^8.2
- laravel/framework: ^11.0
- romanpitak/php-rest-client: ^1.2
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'],