<spanid="evennia-locks-lockhandler"></span><h1>evennia.locks.lockhandler<aclass="headerlink"href="#module-evennia.locks.lockhandler"title="Permalink to this headline">¶</a></h1>
<p>A <em>lock</em> defines access to a particular subsystem or property of
Evennia. For example, the “owner” property can be impmemented as a
lock. Or the disability to lift an object or to ban users.</p>
<p>A lock consists of three parts:</p>
<blockquote>
<div><ulclass="simple">
<li><p>access_type - this defines what kind of access this lock regulates. This
just a string.</p></li>
<li><p>function call - this is one or many calls to functions that will determine
if the lock is passed or not.</p></li>
<li><p>lock function(s). These are regular python functions with a special
set of allowed arguments. They should always return a boolean depending
on if they allow access or not.</p></li>
</ul>
</div></blockquote>
<p>A lock function is defined by existing in one of the modules
listed by settings.LOCK_FUNC_MODULES. It should also always
<p>The accessing object is the object wanting to gain access.
The accessed object is the object this lock resides on
args and kwargs will hold optional arguments and/or keyword arguments
to the function as a list and a dictionary respectively.</p>
<pclass="rubric">Example</p>
<dl>
<dt>perm(accessing_obj, accessed_obj, <ahref="#id5"><spanclass="problematic"id="id6">*</span></a>args, <ahref="#id7"><spanclass="problematic"id="id8">**</span></a>kwargs):</dt><dd><p>“Checking if the object has a particular, desired permission”
if args:</p>
<blockquote>
<div><p>desired_perm = args[0]
return desired_perm in accessing_obj.permissions.all()</p>
</div></blockquote>
<p>return False</p>
</dd>
</dl>
<p>Lock functions should most often be pretty general and ideally possible to
re-use and combine in various ways to build clever locks.</p>
<p>Lock definition (“Lock string”)</p>
<p>A lock definition is a string with a special syntax. It is added to
each object’s lockhandler, making that lock available from then on.</p>
<emclass="property">class </em><codeclass="sig-prename descclassname">evennia.locks.lockhandler.</code><codeclass="sig-name descname">LockHandler</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">obj</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">__init__</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">obj</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.__init__"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.__init__"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">cache_lock_bypass</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">obj</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.cache_lock_bypass"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.cache_lock_bypass"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">add</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">lockstring</span></em>, <emclass="sig-param"><spanclass="n">validate_only</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.add"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.add"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">validate</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">lockstring</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.validate"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.validate"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">replace</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">lockstring</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.replace"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.replace"title="Permalink to this definition">¶</a></dt>
<ddclass="field-odd"><p><strong>lockstring</strong> (<em>str</em>) – The new lock definition.</p>
</dd>
<dtclass="field-even">Returns</dt>
<ddclass="field-even"><p><em>success (bool)</em>– False if an error occurred.</p>
</dd>
<dtclass="field-odd">Raises</dt>
<ddclass="field-odd"><p><aclass="reference internal"href="#evennia.locks.lockhandler.LockException"title="evennia.locks.lockhandler.LockException"><strong>LockException</strong></a>– If a critical error occurred.
<codeclass="sig-name descname">get</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">access_type</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.get"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.get"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">all</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.all"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.all"title="Permalink to this definition">¶</a></dt>
<dd><p>Return all lockstrings</p>
<dlclass="field-list simple">
<dtclass="field-odd">Returns</dt>
<ddclass="field-odd"><p><em>lockstrings (list)</em>– All separate lockstrings</p>
<codeclass="sig-name descname">remove</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">access_type</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.remove"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.remove"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">delete</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">access_type</span></em><spanclass="sig-paren">)</span><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.delete"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">clear</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.clear"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.clear"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">reset</code><spanclass="sig-paren">(</span><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.reset"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.reset"title="Permalink to this definition">¶</a></dt>
<dd><p>Set the reset flag, so the the lock will be re-cached at next
checking. This is usually called by @reload.</p>
<codeclass="sig-name descname">append</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">access_type</span></em>, <emclass="sig-param"><spanclass="n">lockstring</span></em>, <emclass="sig-param"><spanclass="n">op</span><spanclass="o">=</span><spanclass="default_value">'or'</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.append"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.append"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">check</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">accessing_obj</span></em>, <emclass="sig-param"><spanclass="n">access_type</span></em>, <emclass="sig-param"><spanclass="n">default</span><spanclass="o">=</span><spanclass="default_value">False</span></em>, <emclass="sig-param"><spanclass="n">no_superuser_bypass</span><spanclass="o">=</span><spanclass="default_value">False</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.check"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.check"title="Permalink to this definition">¶</a></dt>
<codeclass="sig-name descname">check_lockstring</code><spanclass="sig-paren">(</span><emclass="sig-param"><spanclass="n">accessing_obj</span></em>, <emclass="sig-param"><spanclass="n">lockstring</span></em>, <emclass="sig-param"><spanclass="n">no_superuser_bypass</span><spanclass="o">=</span><spanclass="default_value">False</span></em>, <emclass="sig-param"><spanclass="n">default</span><spanclass="o">=</span><spanclass="default_value">False</span></em>, <emclass="sig-param"><spanclass="n">access_type</span><spanclass="o">=</span><spanclass="default_value">None</span></em><spanclass="sig-paren">)</span><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockHandler.check_lockstring"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockHandler.check_lockstring"title="Permalink to this definition">¶</a></dt>
<emclass="property">exception </em><codeclass="sig-prename descclassname">evennia.locks.lockhandler.</code><codeclass="sig-name descname">LockException</code><aclass="reference internal"href="../_modules/evennia/locks/lockhandler.html#LockException"><spanclass="viewcode-link">[source]</span></a><aclass="headerlink"href="#evennia.locks.lockhandler.LockException"title="Permalink to this definition">¶</a></dt>