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?






Reply via email to