This is how it works:
# define auth
auth = Auth(db, hmac_key=Auth.get_or_create_key())
auth.define_tables(username=True,signature=True)
# define your own tables like
db.define_table('mything',Field('name'),auth.signature)
# than do:
auth.enable_record_versioning(db)
how does it work? every table, including auth_user will have an
auth.signature including created_by, created_on, modified_by, modified_on,
is_active fields. When a record of table mything (or any other table) is
modified, a copy of the previous record is copied into mything_archive
which references the current record. When a record is deleted, it is not
actually deleted but is_active is set to False, all records with
is_active==False are filtered out in searches except in appadmin.
Pros:
- your app will get full record archival for auditing purposes
- could not be simpler. nothing else to do. Try with
SQLFORM.grid(db.mything) for example.
- does not break references and there is no need for uuids
- does not slow down searches because archive is done in separate archive
tables
Cons:
- uses lots of extra memory because every version of a record is stored (it
would be more efficient to store changes only but that would make more
difficult to do auditing).
- slows down db(...).update(...) for multi record because it needs to copy
all records needing update from the original table to the archive table.
This requires selecting all the records.
Comments? Suggestions?