149 By default security is disabled on queries executed on the repository |
149 By default security is disabled on queries executed on the repository |
150 side. |
150 side. |
151 """ |
151 """ |
152 def __init__(self, session, read=None, write=None): |
152 def __init__(self, session, read=None, write=None): |
153 self.session = session |
153 self.session = session |
|
154 self.tx = session._tx |
154 self.read = read |
155 self.read = read |
155 self.write = write |
156 self.write = write |
156 self.oldread = None |
157 self.oldread = None |
157 self.oldwrite = None |
158 self.oldwrite = None |
158 |
159 |
159 def __enter__(self): |
160 def __enter__(self): |
160 if self.read is None: |
161 if self.read is None: |
161 self.oldread = None |
162 self.oldread = None |
162 else: |
163 else: |
163 self.oldread = self.session._tx.read_security |
164 self.oldread = self.tx.read_security |
164 self.session._tx.read_security = self.read |
165 self.tx.read_security = self.read |
165 if self.write is None: |
166 if self.write is None: |
166 self.oldwrite = None |
167 self.oldwrite = None |
167 else: |
168 else: |
168 self.oldwrite = self.session._tx.write_security |
169 self.oldwrite = self.tx.write_security |
169 self.session._tx.write_security = self.write |
170 self.tx.write_security = self.write |
170 self.session._tx.ctx_count += 1 |
171 self.tx.ctx_count += 1 |
171 |
172 |
172 def __exit__(self, exctype, exc, traceback): |
173 def __exit__(self, exctype, exc, traceback): |
173 tx = self.session._tx |
174 self.tx.ctx_count -= 1 |
174 tx.ctx_count -= 1 |
175 if self.tx.ctx_count == 0: |
175 if tx.ctx_count == 0: |
176 self.session._clear_thread_storage(self.tx) |
176 self.session._clear_thread_storage(tx) |
|
177 else: |
177 else: |
178 if self.oldread is not None: |
178 if self.oldread is not None: |
179 self.session._tx.read_security = self.oldread |
179 self.tx.read_security = self.oldread |
180 if self.oldwrite is not None: |
180 if self.oldwrite is not None: |
181 self.session._tx.write_security = self.oldwrite |
181 self.tx.write_security = self.oldwrite |
182 |
182 |
183 HOOKS_ALLOW_ALL = object() |
183 HOOKS_ALLOW_ALL = object() |
184 HOOKS_DENY_ALL = object() |
184 HOOKS_DENY_ALL = object() |
185 DEFAULT_SECURITY = object() # evaluated to true by design |
185 DEFAULT_SECURITY = object() # evaluated to true by design |
186 |
186 |