bsw/jbe@0: Session = mondelefant.new_class() bsw/jbe@0: Session.table = 'session' bsw/jbe@0: Session.primary_key = { 'ident' } bsw/jbe@0: bsw/jbe@0: Session:add_reference{ bsw/jbe@0: mode = 'm1', bsw/jbe@0: to = "Member", bsw/jbe@0: this_key = 'member_id', bsw/jbe@0: that_key = 'id', bsw/jbe@0: ref = 'member', bsw/jbe@0: } bsw/jbe@0: bsw/jbe@0: local function random_string() bsw/jbe@0: return multirand.string( bsw/jbe@0: 32, bsw/jbe@0: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' bsw/jbe@0: ) bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Session:new() bsw/jbe@0: local session = self.prototype.new(self) -- super call bsw/jbe@0: session.ident = random_string() bsw/jbe@0: session.additional_secret = random_string() bsw/jbe@0: session:save() bsw/jbe@0: return session bsw/jbe@0: end bsw/jbe@0: bsw/jbe@0: function Session:by_ident(ident) bsw/jbe@0: local selector = self:new_selector() bsw/jbe@0: selector:add_where{ 'ident = ?', ident } bsw@1074: selector:add_field{ 'authority_uid' } bsw/jbe@0: selector:optional_object_mode() bsw/jbe@0: return selector:exec() bsw/jbe@0: end bsw@813: bsw@813: function Session.object:has_access(level) bsw@813: if level == "member" then bsw@813: if app.session.member_id then bsw@813: return true bsw@813: else bsw@813: return false bsw@813: end bsw@813: bsw@813: elseif level == "everything" then bsw@813: if self:has_access("member") or config.public_access == "everything" then bsw@813: return true bsw@813: else bsw@813: return false bsw@813: end bsw@813: bsw@813: elseif level == "all_pseudonymous" then bsw@813: if self:has_access("everything") or config.public_access == "all_pseudonymous" then bsw@813: return true bsw@813: else bsw@813: return false bsw@813: end bsw@813: bsw@813: elseif level == "authors_pseudonymous" then bsw@813: if self:has_access("all_pseudonymous") or config.public_access == "authors_pseudonymous" then bsw@813: return true bsw@813: else bsw@813: return false bsw@813: end bsw@813: bsw@813: elseif level == "anonymous" then bsw@813: if self:has_access("authors_pseudonymous") or config.public_access == "anonymous" then bsw@813: return true bsw@813: else bsw@813: return false bsw@813: end bsw@813: bsw@813: end bsw@813: bsw@813: error("invalid access level") bsw@813: end