Alerta: Proiect in dezvoltare activa!

Aceasta este o lansare timpurie. Asadar, asteptati schimbari si caracteristici noi in viitorul apropiat.

Whatwasit este un pachet pentru urmarirea modificarilor la modelele Ecto ale proiectului dvs. pentru audit sau versiune. Tineti evidenta fiecarei modificari a modelului dvs. si a celui care a facut modificarea. Stergerile pot fi urmarite si ele.

Instalare

Adaugati dependenta la mix.exs:

defp deps do … {: whatwasit, “~> 0.2”}, … end

Obtineti dependenta:

Notiuni de baza

Rulati sarcina de instalare mix:

Adaugati instructiunile de configurare in fisierul config / config.exs al proiectului:

# config / config.exs config: whatwasit, repo: MyProject.Repo

Rulati migrarea:

Adaugati ce a fost la fiecare model pe care doriti sa il urmariti:

# web / models / post.ex defmodule MyProject.Post folosi MyProject.Web,: model use Whatwasit # adauga aceasta schema “posts” face camp: title,: string field: body,: string timestamps end def changeset (model, params \\% {}) modeleaza |> cast (params, ~ w (corpul titlului)) |> validate_required (~ w (corpul titlului) a) |> pregatire_versiune # adauga acest sfarsit

Dupa editarea unei postari, puteti vizualiza toate versiunile pentru toate modelele:

iex (1)> MyProject.Repo.all MyProject.Whatwasit.Version [% MyProject.Whatwasit.Version {__ meta__: # Ecto.Schema.Metadata <: loaded, “versions”>, action: “update”, id: 16, inserat_at: # Ecto.DateTime <2016-07-22 01:49:55>, item_id: 9, item_type: “Postare”, obiect:% {“body” => “42”, “id” => 9, ” insert_at “=>” 2016-07-22T01: 49: 25 “,” title “=>” Raspunsul “,” updated_at “=>” 2016-07-22T01: 49: 25 “}, updated_at: # Ecto.DateTime <2016-07-22 01:49:55>, whodoneit: # Ecto.Association.NotLoaded <association: whodoneit nu este incarcat>,}]

Alternativ, recuperati o lista de modele versionate cu:

iex (1)> post = MyProject.Repo.get MyProject.Post, 9% MyProject.Post {__ meta__: # Ecto.Schema.Metadata <: loaded, “posts”>, body: “Raspunsul este 42”, id: 9, inserat_at: # Ecto.DateTime <2016-07-22 01:49:25>, titlu: „Care este intrebarea”, actualizat_at: # Ecto.DateTime <2016-07-22 01:49:55>} iex ( 2)> MyProject.Whatwasit.Version.versions post [% MyProject.Post {__ meta__: # Ecto.Schema.Metadata <: loaded, “posts”>, body: “42”, id: 9, inserat_at: “2016-07 -22T01: 49: 25 “, title:” Raspunsul “, updated_at:” 2016-07-22T01: 49: 25 “}]

Stergerea urmaririi

Pentru a urmari stergerile, trebuie sa treceti un set de modificari la Repo.delete sau Repo.delete !.

porno tv anal interacial
madres cachondas anal maduras españolas
zoofilia con abuelas vieja gorda follando
brutal tops compilacion mamadas
maduras latex pilladas de torbes
porno español incestos hombres pajeandose
casadas follando por dinero borracha anal
tetas amaters cfnmwave.com
madre pajea a su hijo jovencitas folladoras
jovencitas folladoras videos porno gay de españoles
porno online gratis follando con las vecinas
porno viejas alemanas carne de mercado xxx
mujeresfollando tetas bailando
inazuma eleven xxx follando en el parque
naomi woods insesto
pornografia gratis gallega porno
porno españolas peludas videos madres lesbianas
porno por el culo metiendo mano en el bus
mujeres fornicando jovencitas españolas follando por dinero
porno chileno porno español creampie

Retineti ca acesta nu este modul implicit prin care phoneix.gen.html a creat actiunea de stergere.

defmodule MyProject.PostController do # … def delete (conn,% {“id” => id}) do changeset = Repo.get! (Post, id) |> Post.changeset Repo.delete! (changeset) conn | > put_flash (: info, “Postarea a fost stearsa cu succes.”) |> redirectioneaza (catre: post_path (conn,: index)) end end

Urmarirea cine a facut schimbarea

Cativa pasi suplimentari sunt necesari pentru a urmari cine a facut modificarea. Urmatorul exemplu poate fi putin diferit in functie de functia pe care o utilizati pentru a obtine utilizatorul curent. Urmatorul exemplu foloseste Coherence ca pachet de autentificare:

Instalati cu optiunea –whodoneit:

amesteca whatwasit.install –whodoneit

Adaugati un parametru suplimentar la functia de set de modificari a modelului dvs. si treceti-l la `prepare_version:

defmodule MyProject.Post folosi MyProject.Web,: model use Whatwasit # … def changeset (model, params \\% {}, opts \\ []) do model |> cast (params, ~ w (body title) ) |> validate_required (~ w (corpul titlului) a) |> prepare_version (opts) end end

Treceti utilizatorul curent la setul de modificari de la controlerul dvs.:

defmodule MyProject.PostController do # … # Add this defp whodoneit (conn) do user = Coherence.current_user (conn) [whodoneit: user, whodoneit_name: user.name] end def update (conn,% {“id” => id, “post” => post_params}) do post = Repo.get! (Post, id) changeset = Post.changeset (post, post_params, whodoneit (conn)) case Repo.update (changeset) do {: ok, post } -> conn |> put_flash (: info, “Post actualizat cu succes.”) |> redirect (catre: post_path (conn,: show, post)) {: error, changeset} -> render (conn, “edit.html “, post: post, changeset: changeset) end end def delete (conn,% {” id “=> id}) do changeset = Repo.get! (Post, id) |> Post.changeset (% {}, whodoneit (conn)) Repo.delete! (changeset) conn |> put_flash (: info, “Posteaza sters cu succes.”) |> redirectionare (catre: post_path (conn,:index)) end end

Cand urmariti whodoneit, sunt actualizate doua campuri din schema de versiuni. O relatie belong_to urmareste relatia cu utilizatorul curent, iar whodoneit_name urmareste numele utilizatorului curent.

Numele este urmarit pentru a gestiona cazul stergerii unui utilizator care a facut modificari. Cand utilizatorul este sters, referinta la utilizare este anulata in inregistrarea Versiune. Dar numele este inca urmarit pentru identificarea ulterioara a whodoneitului.

Implicit este sa utilizati campul: nume de pe utilizator. Acest lucru poate fi modificat prin setarea: name_field in configuratie sau prin trecerea optiunii name_field:: field_name pentru a utiliza Whatwasit.

Stocati whodoneit in baza de date

Exemplul de mai sus salveaza o referinta la utilizatorul curent in baza de date. Este posibil sa doriti sa stocati datele utilizatorului in baza de date. Acest lucru va va permite sa salvati detaliile utilizatorului in acel moment, cum ar fi adresa IP actuala.

Utilizati optiunea –whodoneit-map pentru a activa acest lucru:

amestecati whatwasit.install –whodoneit-map

Aceasta optiune inlocuieste campurile whodoneit_id si whodoneit_name din schema Version cu: whodoneit: map.

Pentru aceasta optiune, modelele dvs. vor fi la fel. Cu toate acestea, va trebui sa faceti modificari in controlerul dvs. astfel:

defmodule MyProject.PostController folosesc MyProject.Web,: controller # … def update (conn,% {“id” => id, “post” => post_params}) do post = Repo.get! (Post, id) changeset = Post.changeset (post, post_params, whodoneit (conn)) case Repo.update (changeset) do {: ok, post} -> conn |> put_flash (: info, “Post actualizat cu succes.”) |> redirect ( to: post_path (conn,: show, post)) {: error, changeset} -> render (conn, “edit.html”, post: post, changeset: changeset) end end def delete (conn,% {“id” => id}) do changeset = Repo.get! (Post, id) |> Post.changeset (% {}, whodoneit (conn)) Repo.delete! (changeset) conn |> put_flash (: info, “Post sters cu succes. “) |> redirect (catre: post_path (conn,: index)) end defp whodoneit (conn) do # eliminati campurile de parola whodoneit = Coherence.current_user (conn) |> Admin.Whatwasit.Version.remove_fields (~ w (password password_confirmation password_hash) a) [whodoneit: whodoneit] end end

Model Whodoneit cu tip de cheie primara uuid

Daca modelul dvs. de utilizator are un tip uuid de cheie primara uuid, utilizati optiunea de instalare –whodoneit-id-type = uuid:

amestecati whatwasit.install –whodoneit-id-type = uuid

Aceasta va crea tipul corect de asociere in fisierul de migrare, precum si fisierul Versiune shema.

Licenta

ce este Copyright (c) 2016 E-MetroTel

Sursa este eliberata sub licenta MIT.

Verificati LICENTA pentru mai multe informatii.