owen-it / laravel-auditing

Record the change log from models in Laravel
https://laravel-auditing.com
MIT License
2.99k stars 383 forks source link

Log - messages #9

Closed edukmattos closed 8 years ago

edukmattos commented 8 years ago

@devthiagolino Os meus logs aparecem assim:

user.name atualizou os dados de SANTA CATARINA1 De: old.uf -> Para: new.uf updated in 2015-10-02 02:33:45 De: SANTA CATARINA -> Para: SANTA CATARINA1 updated in 2015-10-02 02:33:45 user.name atualizou os dados de SANTA CATARINA De: old.uf -> Para: new.uf updated in 2015-10-02 11:01:41 De: SANTA CATARINA1 -> Para: SANTA CATARINA updated in 2015-10-02 11:01:41

2 duvidas por mais obvias pois estou comecando a utilizar o laravel: 1) Por que ao inves do nome do usuario aparece user.name ? Tenho que fazer um relacionamento das tabelas logs e users ? 2) Como suprimir os logs onde old.campo e new.campo são nulos ?

anteriovieira commented 8 years ago

Bom dia @ecmattos

Você pode personalizar as mensagens de resposta fazendo conforme descreve aqui.

O user.name aparece justamente porque não foi encontrada a propriedade name no objeto user, verifique se seu registro de log comtém um usuário vinculado. Este é o usuário responsável pela alteração do registro auditado, o mesmo é vinculado caso esteja logado, o contrário o campo user fica como null e user.name irá aparecer na sua mensagem personalizada. Vou implementar a possibilidade de adicionarmos valores defaults para esta situação.

Realmente os camos nulos não são omitidos das mensagens de logs, essa é uma melhoria que pretendo adicionar ainda esta semana.

edukmattos commented 8 years ago

@anteriovieira Oi ! Obrigado pelo retorno ! A minha tabela user já possui o id 1 e o name correspondente ecmattos. Eu não preciso fazer o relacionamento entre as tabelas users e logs ?

edukmattos commented 8 years ago

@anteriovieira, Quanto a omissão das mensagens de logs quando os old.campo e new.campo são nulos , seria apenas uma modificação no arquivo auditing.blade.php ?

anteriovieira commented 8 years ago

@ecmattos , não precisa fazer o relacionamento do log com o user, este relacionamento já esta presente no model log com o trecho de código a seguir:

    public function user()
    {
        return $this->belongsTo(\Config::get('auth.model'));
    }

Agora uma coisa que temos que ficar atento é definir corretamente o model do usuário no arquivo de configuração config\auth.php, pois precisamos saber qual é o model do usuário que temos que relacionar.

Agora se você quiser buscar todos os logs registrados por um usuário X fazendo $user->logs, ai sim você precisaria relacionar, neste caso poderia fazer assim:

use OwenIt\Auditing\Auditing;
use OwenIt\Auditing\Log;
class User extends Auditing 
{
        // ...
    public function logs()
    {
        return $this->hasMany(Log::class, 'user_id');
    }
}

Quanto a omissão dos campos nulos, não temos um template auditing.blade para as mensagens, vou ter que alterar a lógica na hora de montar as mensagens. Uma outra ideia futura é adicionar um aquivo de config para caso o desenvolvedor queira alterar funcionalidades padróes do pacote.

anteriovieira commented 8 years ago

No exemplo acima eu fiz o extends do Auditing, mas só se faz necessário caso também queira auditar os dados de usuário, se este não for o caso pode retirar o use OwenIt\Auditing\Auditing;.

edukmattos commented 8 years ago

@anteriovieira O arquivo pelo qual me referia era o seguinte:

 // resources/views/my-app/auditing.blade.php
    ...
    <ol>
        @forelse($logs as $log)
            <li>
                {{ $log->customMessage }}
                <ul>
                    @forelse($log->customFields as $field => $message)
                        <li>{{ $message }}</li>
                    @endforelse
                </ul>
            </li>
        @empty
            <p>No logs</p>
        @endforelse
    </ol>
    ...
edukmattos commented 8 years ago

@anteriovieira meu config/auth.php está assim

/* -------------------------------------------------------------------------- Authentication Model
When using the "Eloquent" authentication driver, we need to know which
Eloquent model should be used to retrieve your users. Of course, it
is often just the "User" model but you may use whatever you like.
*/
'model' => App\User::class,

/*
|--------------------------------------------------------------------------
| Authentication Table
|--------------------------------------------------------------------------
|
| When using the "Database" authentication driver, we need to know which
| table should be used to retrieve your users. We have chosen a basic
| default value but you may easily change it to any table you like.
|
*/

'table' => 'users',
anteriovieira commented 8 years ago

Seu model User esta localizado conforme sua configuração?

'model' => App\User::class,
edukmattos commented 8 years ago

@anteriovieira meu config/auth.php está assim

/* -------------------------------------------------------------------------- Authentication Model
When using the "Eloquent" authentication driver, we need to know which
Eloquent model should be used to retrieve your users. Of course, it
is often just the "User" model but you may use whatever you like.

*/

'model' => App\User::class,

/* -------------------------------------------------------------------------- Authentication Table
When using the "Database" authentication driver, we need to know which
table should be used to retrieve your users. We have chosen a basic
default value but you may easily change it to any table you like.

*/

'table' => 'users',

edukmattos commented 8 years ago

Pensei que tivesse resolvido mas continua aparecendo {user.name} nos logs.

anteriovieira commented 8 years ago

Removas os registros de logs do banco e tente fazer novas modificações para testar. Estou criando uma aplicação aqui para testar também. Quanto as configurações acredito que estejam certas, pois não foi retornado nenhum erro de model not found.

edukmattos commented 8 years ago

@anteriovieira Nao sei se pode ser isso que está causando o problema: Estou com problema na minha autenticacao que ainda vou resolver mas os dados do id 1 da tabela users estao todos preenchidos. Ao registrar os logs, o user_id vem como NULL como disseste anteriormente. Eu edito o campo user_id de NULL para 1 e deveria funcionar normalmente ? Vou limpar os logs.

anteriovieira commented 8 years ago

Sim deveria, vou testar aqui e te dou um retorno

edukmattos commented 8 years ago

ok

edukmattos commented 8 years ago

@anteriovieira Limpei e continua {user.name} !

edukmattos commented 8 years ago

@anteriovieira Para ir pensando numa atualizacao (seria bem legal pois nao encontrei nada ainda):

Nas mensagens de logs, para os campos com relacoes em outras tabelas, deveria mostrar a informacao do relacionada ao campo correspondente.

Exemplo: Alterei a categoria de um produto (de TV para Celular). Na tebela logs, efetuará o registro do log da category_id de 1 para 2 mas na mensagem do log deveria mostrar de "TV" para "Celular" (textos) e nao os valores do campo.

Nao sei se de repente associar tambem: protected $doKeepLogOf = ['description', 'category_id']; // Informe os campos que deseja registrar no log. protected $do???????? = ['description ???', 'categories.id']; // Informe os campos que deseja relacionar no log.

Nao sei se me entendeste ?

empty commented 8 years ago

Why are you emailing me?

On Oct 2, 2015, at 10:06 AM, ecmattos notifications@github.com wrote:

@anteriovieira https://github.com/anteriovieira Para ir pensando numa atualizacao (seria bem legal pois nao encontrei nada ainda):

Nas mensagens de logs, para os campos com relacoes em outras tabelas, deveria mostrar a informacao do relacionada ao campo correspondente.

Exemplo: Alterei a categoria de um produto (de TV para Celular). Na tebela logs, efetuará o registro do log da category_id de 1 para 2 mas na mensagem do log deveria mostrar de "TV" para "Celular" (textos) e nao os valores do campo.

Nao sei se de repente associar tambem: protected $doKeepLogOf = ['description', 'category_id']; // Informe os campos que deseja registrar no log. protected $do???????? = ['description ???', 'categories.id']; // Informe os campos que deseja relacionar no log.

Nao sei se me entendeste ?

— Reply to this email directly or view it on GitHub https://github.com/owen-it/laravel-auditing/issues/9#issuecomment-145031198.

edukmattos commented 8 years ago

@empty I dont know !

empty commented 8 years ago

:)

On Oct 2, 2015, at 10:10 AM, ecmattos notifications@github.com wrote:

@empty https://github.com/empty I dont know !

— Reply to this email directly or view it on GitHub https://github.com/owen-it/laravel-auditing/issues/9#issuecomment-145032124.

anteriovieira commented 8 years ago

@empty , you was mentioned in one of the comments, you can leave this issue, we will be more careful in the comments.

edukmattos commented 8 years ago

@anteriovieira Pensei que tinha sido culpa minha !

anteriovieira commented 8 years ago

rsrsrs pior que foi @ecmattos , foi no comentário que você adicionou sobre o auditing.blade, mas já editei pra não referenciar mais nosso amigo empty. Coloquei ``` para encapsular o código.

anteriovieira commented 8 years ago

Devemos fazer isso quando postar exemplos de código. Fazemos isso com Markdown.

edukmattos commented 8 years ago

Puts ! Obrigado !

edukmattos commented 8 years ago

Desculpa !

anteriovieira commented 8 years ago

rsrsr tranquilo.

edukmattos commented 8 years ago

@anteriovieira Incluí ele de novo ?

anteriovieira commented 8 years ago

Sim, sempre que você colocar @ecmattos , vai estar mencionando alguém.

edukmattos commented 8 years ago

@anteriovieira Agora para ele sair devo editar colocando ´´´ antes e depois do usuario dele no meu comentario acima ? e depois avisar ele para sair ?

anteriovieira commented 8 years ago

Esquenta não, faz o sequinte estou fechando este issue, dai você abre outro com a nossa questão principal.