


Muito bem testado, otimizado e pronto para produção!
Abordamos muita complexity nos bastidores, para fornecer a você muita simplicity .
Integrado com o pacote laravel-debugbar pronto para uso: laravel debugbar
composer require imanghafoori/laravel-heyman
PHP v7.0 ou superior
Laravel v5.1 ou superior
Aqui você pode ver um bom exemplo em:
https://github.com/imanghafoori1/council
Especialmente este arquivo:
https://github.com/imanghafoori1/council/blob/master/app/Providers/AuthServiceProvider.php
Este é um fork do resultado da série de tutoriais laracasts.com refatorados para usar o pacote Heyman.

Solicitação HTTP Zumbi =>

<= Laravel Heyman
Imagine que seu chefe chega até você e diz:
Hey man !!! When you visit the login form, You should be guest, Otherwise you get redirected to '/panel',
Escreva o código para mim agora mesmo... Mas TENHA EM MENTE que você não tem permissão para mexer no código atual. é muito sensível e não queremos que você o altere. Você pode quebrá-lo.
E você escreve um código como este em um método boot do provedor de serviços para implementar o que seu chefe queria.

Você pode usar métodos alternativos como este se não gostar de muita sintaxe detalhada fornecida por padrão.
Situações de alias (ex. whenYouMakeView to view )
Condições do alias (ex. youShouldBeGuest para beGuest )
Você deve fazer isso no método de inicialização.

1- Dessa forma você pode decouple totalmente a autorização e muito código de proteção do restante do código do seu aplicativo e colocá-lo em outro lugar. Assim seus Controllers e Rotas ficarão menos lotados e você terá um local central onde limitará o acesso dos usuários à sua aplicação ou realizará a validação de Request.
2- Na verdade, quando você escreve seu código dessa maneira, você está obedecendo ao famoso Tell don't ask principle.
Você está dizendo à estrutura o que fazer em determinadas situações, em vez de obter informações e decidir o que fazer então.
Procedural code gets information then makes decisions. Object-oriented code tells objects to do things. — Alec Sharp
3- Esta abordagem é particularmente útil quando você, por exemplo, escreve um pacote que precisa de ACL, mas deseja permitir que os usuários do pacote substituam e apliquem suas próprias regras de ACL (ou validação) em suas rotas de pacote...
E isso se torna possível quando você usa laravel-HeyMan para ACL. Os usuários podem facilmente cancelar as regras padrão e reescrever sua acl favorita ou material de validação em ServiceProviders regulares.
Ei cara, isso é uma coisa incrível!
// Isso está escrito no pacote e reside na pasta do fornecedor, portanto não podemos tocá-lo.HeyMan::whenYouHitRouteName('myPackageRoute')->youShouldHaveRole(....; Para substituir isso, usamos o método forget , em app/Providers/... :
função pública inicialização() {
//Cancela as regras atuais
HeyMan::forget()->aboutRoute('myPackageRoute');
//Adiciona novas regras por usuário do pacote.
HeyMan::whenYouHitRouteName('myPackageRoute')-> ...
}Você não precisa de nenhuma folha de dicas.
Auto-completiondo IDE é totalmente suportado.

Heyman:: ?Você pode colocá-los no método
bootAuthServiceProvider.php(ou qualquer outro provedor de serviços).

Você deve chamar o seguinte método da classe HeyMan Facade.
use ImanghafooriHeyManFacadesHeyMan;// ouuse HeyMan; // <--- alias
Novamente recomendamos visitar este arquivo:
Exemplo de regras de trabalho do Heyman
HeyMan:: (situação) -> (condição) -> caso contrário() -> (reação) ;
HeyMan::whenYouVisitUrl(['/welcome', '/home'])->... // você pode passar um ArrayHeyMan::whenYouVisitUrl('/admin/*')->... // ou combinar por curinga HeyMan::whenYouSendPost('/artigo/loja')-> ...
HeyMan::whenYouSendPatch('/artigo/editar')-> ...
HeyMan::whenYouSendPut('/artigo/editar')-> ...
HeyMan::whenYouSendDelete('/artigo/delete')-> ... HeyMan::whenYouHitRouteName('welcome.name')->... // Para nomes de rotasHeyMan::whenYouHitRouteName('welcome.*')->... // ou correspondência por curinga HeyMan::whenYouCallAction('HomeController@index')->...
HeyMan::whenYouCallAction('HomeController@*')->... // ou correspondência por curinga HeyMan::whenYouMakeView('article.editForm')->... // também aceita um array
HeyMan::whenYouMakeView('article.*')->... // Você pode assistir a um grupo de visualizações Na verdade, refere-se ao momento em que view('article.editForm') é executado.
HeyMan::whenEventHappens('meuEvento')->... Na verdade, refere-se ao momento em que event('myEvent') é executado.
HeyMan::whenYouSave(AppUser::class)->... HeyMan::whenYouFetch(AppUser::class)->... HeyMan::whenYouCreate(AppUser::class)->... HeyMan::whenYouUpdate(AppUser::class)->... HeyMan::whenYouDelete(AppUser::class)->...
Na verdade refere-se ao momento em que o eloquente dispara seus eventos internos como: (salvar, deletar, criar, ...)
HeyMan:: (situação) -> (condição) -> caso contrário() -> (reação) ;
Depois de mencionar a situação, é hora de mencionar a condição.
//define GateGate::define('hasRole', function(){...});Então você pode usar o portão:
HeyMan::whenYouVisitUrl('/home')->thisGateShouldAllow('hasRole', 'editor')->caso contrário()->...;Passando por um fechamento como um portão:
$gate = function($user, $role) {/// algum retorno lógico verdadeiro;
}
HeyMan::whenYouVisitUrl('/home')->thisGateShouldAllow($gate, 'editor')->caso contrário()->...; HeyMan::whenYouVisitUrl('/home')-> youShouldBeGuest() ->caso contrário()->...;
HeyMan::whenYouVisitUrl('/home')-> youShouldBeLoggedIn() ->caso contrário()->...;Closure ou Method ou Value : HeyMan::whenYouVisitUrl('home')->thisMethodShouldAllow('someClass@someMethod', ['param1' => 'value1'])->caso contrário()->...;
HeyMan::whenYouVisitUrl('home')->thisClosureShouldAllow( function($a) { ... }, ['param1'] ) ->caso contrário()->...;
HeyMan::whenYouVisitUrl('home')->thisValueShouldAllow( $someValue )->otherwise()->...; HeyMan::whenYouHitRouteName('articles.store')->yourRequestShouldBeValid(['title' => 'required', 'body' => 'required',
]); Você também pode modificar os dados antes da validação chamando beforeValidationModifyData() .
$modifier = function ($data) { // remove o caractere "@" do "nome" antes da validação.
$dados['nome'] = str_replace('@', '', $dados['nome']); retornar $dados;
}
HeyMan::whenYouHitRouteName('welcome.name')
->yourRequestShouldBeValid(['nome' => 'obrigatório'])
->beforeValidationModifyData($modificador);Você também pode declarar alguns pontos de verificação em algum lugar, dentro do código da sua aplicação:
HeyMan::checkPoint('MinhaLane');E coloque algumas regras para isso
HeyMan::whenYouReachCheckPoint('MyLane')->youShouldHaveRole('Zombie')-> ... HeyMan::whenYouVisitUrl('home')->always()-> ...
HeyMan::whenYouVisitUrl('home')->sessionShouldHave('key1')->... Você também pode usar os métodos " always " e " sessionShouldHave ":
HeyMan::whenYouVisitUrl('home')->always()-> ...
HeyMan::whenYouVisitUrl('home')->sessionShouldHave('key1')->...Você pode estender as condições e introduzir novos métodos na API heyman assim:
// Coloque este código:// no método `boot` dos seus provedores de serviçoHeyMan::condition('youShouldBeMan', function () { return function () { return auth()->user() && auth()-> usuário()->gênero === 'Homem';
};
});// ou HeyMan::condition('youShouldBeMan', 'AppSomeWhereSomeClass@someMethod');Então você pode usá-lo assim:
HeyMan::whenYouVisitUrl('home')->youShouldBeMan()-> ...Legal, não é?!
HeyMan:: (situação) -> (condição) -> caso contrário() -> (reação) ;
HeyMan::whenSaving(AppUser::class)->thisGateShouldAllow('hasRole', 'editor')->caso contrário()->weDenyAccess(); Uma AuthorizationException será lançada se necessário
HeyMan::whenYouVisitUrl('/login')-> ... ->caso()->redirect()->to(...) ->with([...]);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso()->redirect()->route(...) ->withErrors(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso()->redirect()->action(...) ->withInput(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->redirect()->intended(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->redirect()->guest(...); Na verdade, o método de redirecionamento aqui é muito parecido com a função auxiliar redirect() do laravel.
$msg = 'Minha Mensagem';
HeyMan::whenYouVisitUrl('/login')
->vocêShouldBeGuest()
->caso contrário()
->weThrowNew(AuthorizationException::class, $msg); HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->abortar(...); Chamar essas funções gera exatamente a mesma resposta que chamá-las na função auxiliar response() : return response()->json(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->response()->json(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->response()->view(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->response()->jsonp(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->response()->make(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->response()->download(...); HeyMan::whenYouVisitUrl('/login')->
...
->caso contrário()
->weRespondFrom('AppHttpResponsesAuthentication@guestsOnly'); namespace AppHttpResponses;autenticação de classe
{função pública apenas convidados()
{if (request()->expectsJson()) {return response()->json(['error' => 'Unauthenticated.'], 401);
}return redirecionamento()->convidado(rota('login'));
}
}Ei cara, você vê? temos apenas uma resposta HTTP aqui. Assim, nossos controladores ficam livres para lidar com as situações certas e não se preocupam com situações excepcionais.
Ei cara, você pode querer chamar algum método ou disparar um evento antes de enviar a resposta de volta. Você pode fazer isso pelos métodos afterCalling() e afterFiringEvent() .
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->afterFiringEvent('explode')->response()->json(...);
HeyMan::whenYouVisitUrl('/login')-> ... ->caso contrário()->afterCalling('someclass@method1')->response()->json(...);Você pode desativar as verificações do HeyMan assim (útil durante o teste):

HeyMan::turnOff()->eloquentChecks();.../// Você pode salvar alguns modelos eloquentes aqui... /// sem limitações das regras do HeyMan.... HeyMan::turnOn()->eloquentChecks();
Se você encontrar um problema ou tiver uma maneira melhor de fazer algo, sinta-se à vontade para abrir um problema ou uma solicitação pull.
Como sempre, se você achou este pacote útil e deseja nos encorajar a mantê-lo e trabalhar nele. Basta pressionar o botão estrela para declarar sua vontade.
Um pacote mínimo, mas poderoso, para fornecer uma melhor estrutura e oportunidade de armazenamento em cache para seus aplicativos laravel.
https://github.com/imanghafoori1/laravel-widgetize
Um pacote mínimo, mas poderoso, para lhe dar a oportunidade de refatorar seus controladores.
https://github.com/imanghafoori1/laravel-terminator
Ele permite que você faça login com qualquer senha apenas no ambiente local.
https://github.com/imanghafoori1/laravel-anypass
Ele verifica automaticamente seu aplicativo laravel ( novo )
https://github.com/imanghafoori1/laravel-microscope
Great spirits have always encountered violent opposition from mediocre minds. "Albert Einstein"