Maslosoft Binder Documentation
Knockout JS tracker and binding handlers with coffee and sugar
ACL
Access Control For User Interface Elements
Configuring
This binding will check if users is allowed action,
and hide element if denied. Before use, action need to be defined
by static property Maslosoft.Binder.Acl.allow
of ACL binding handler. This property should contain Access Control
checking function. This function need to return boolean true
or false
Access control function will get parameters same as observable value. In fact this binding handler will simply pass it's value to access control cheching function and display or hide element according to this function's result.
Using in HTML
Checking roles is performed by user defined function, which will get all parameters passed to observable. This way Your access control logic can be arbitrarily customized.
This binding requires observable value to allow updates. However
format of value is not strict, as it's simply passed to
checking function defined as Maslosoft.Binder.Acl.allow
.
In this example ACL consist of roles as a object keys and user observable object instance as a value:
<div data-bind="acl: {'<role-name>': <observable-user-instance>}"><ui-element></div>
If updates are not required, even string value can be passed.
Live Example
In this example user has always granted access to action.one
, and access to
action.two
is dependent on its isGuest
property value.
Try to click buttons to see result:
Relevant code used in examples:
<div> <span data-bind="acl: {'action.one': binder.model.AclUser}" class="label label-warning">Should be visible always</span> <span data-bind="acl: {'action.two': binder.model.AclUser}" class="label label-success">Should be visible for registered</span> <br /> <br /> <button class="btn btn-success" id="allow">Allow Access</button> <button class="btn btn-danger" id="deny">Deny Access</button> </div> <script> window.onload = (function () { var actionAllowed = ''; // This is example function to check access binder.myAcl = function (acl) { console.log("Checking acl: ", acl); if (acl['action.one']) { console.log('Allow action.one'); return true; } if (acl['action.two'] && !acl['action.two'].isGuest) { console.log('Allow action.two'); return true; } return false; }; // Apply bindings Maslosoft.Binder.Acl.allow = binder.myAcl binder.model.AclUser = new Maslosoft.Koe.AclUser(); ko.applyBindings({model: binder.model}, document.getElementById('ko-binder')); }); </script>