Menu

Maslosoft Document Foundation Logo Maslosoft Document Foundation
PHP Driven, MongoDB Backed, Elasticsearch Searchable, MVVM Powered Toolkit 

Web Application Components

This is a toolkit for creating modern web application with MongoDB for storage, Elasticsearch for searching.

It provides facility for various tasks:

  • Application initialization
  • Requests routing
  • JS/CSS assets managing
  • Access Control
  • Data validation

Besides that, this package contains many minor helper classes.

Knockout Powered Widgets

Widgets are generated by PHP, backed by Mangan and are seamlessly combined with Knockout JS bindings. Use widgets as if they were usual PHP widgets, and they will automatically round-trip from Mongo up to the HTML's elements and form inputs.

Widgets confguration is at minimum, all what they can - they take from model. When using widgets, developer or designer don't need to take care of field labels, data types, validation. Can focus on what's important - layout, arrangment - and can leave data related tasks to someone who's proficient with this.

Don't Repeat Yourself

Often, to create some data related form input, or grid column, display some information from database - at view where it is presented - user interface designer have to use proper data type related constructs. Whenever be it function calls or classes this add's a repeated code scattered all over the system. This have been overcome with common, precise definition, which can be used at different aspects of application. Once data model is defined, it can be properly stored, converted to other data types, displayed and edited - all without additional code or preparation.

Quick Example

Assume user model data types are defined. It's easy to define how it looks too. Will pull admin user from db too. In three lines.

Notice that only fields are passed, how are they rendered is defined once per whole application. Only crucial information is required here. This example is really executed here, no mockups!

*
echo $form = ActiveForm::widget(['model' => (new User)->findByUserName('admin')]);
echo $form->renderFields('username', 'firstName', 'lastName');
echo $form->close();

Users and group management

This is module for managing users and users groups. This include creating and editing user accounts, registering, authenticating, managing access control and groups of users.

Group Role Based Access Control

Group role based access control is extension of Role-Based access control. Instead of applying roles to individual users, roles are applied to groups. Then users are added to groups to attach proper permissions. This has several advantages over attaching roles directly to users.

Reusable presets of permissions

Each group can define access to user actions and other scenarios. User can be attached to one or more groups. This results in merged permissions. Permissions are merged in secure way, so that in case of conflicting role access levels, permission is simply denied. This merge is done by incorporating different access levels. For each entity there are three possible values:

  • Allow
  • Not set
  • Deny

Allow means that user have access to resource, unless he is member of group which has explicitly denied access.

When not set, it will denied access, unless some other group allows it. If in any group resource is set to deny, it will not allow access even if other group allowed it. While it might sound complicated, access resolving could be show in simple equation:

## Administration module This module contains web application maintainer tasks: * End user application configuration editing inteface * Displaying administrative messages for application users * Search index managing * Access to application trash bin