Date post: | 19-Jan-2017 |
Category: |
Technology |
Upload: | sencha |
View: | 50 times |
Download: | 6 times |
Enterprise Applications, Role Based Access Controls (RBAC) and Client Customizations
Steve WhatmoreArchitect, PureFacts Financial Solutions Inc.
Introduction
• PureFacts Financial Solutions- ISV that produces a best-in-class mission critical software for the Wealth Management Industry
- Located on Bay St. in Toronto, Canada
- 1/4 of Trillion dollars managed on our platform
• Steve Whatmore- 35 + years in software development
- MBA, Hon BSc in Comp Sci, currently pursuing CFA
- Experience across multiple industries and numerous technology stacks
2
www.purefacts.com
• Multi tenant
• SaaS enabled
• Multi-lingual
• Role based
• White-labelled
• Client customizations
• Salesforce and Dynamics Integrations
PureWealth Suite
• Single code base / architecture
• 15 K classes (even split before UI / backend)
• Ext.Direct (highly customized)
• Extensive use of common components
• Configuration based (everything)
PureWealth Suite
PureWealth Suite
Application JS File
<!-- ************************************************************************ PureFees JS FILES ************************************************************************--> <object id="PureFeesMain" type="System.Collections.ArrayList"> <constructor-arg name="c"> <list> <value>Web\js\PureFees\default\app\model\AbstractFeeSearchResult.js</value> <value>Web\js\PureFees\default\app\model\FeeRefFrequency.js</value> <value>Web\js\PureFees\default\app\model\FeeRefMethodology.js</value> <value>Web\js\PureFees\default\app\model\FeeRefPerformanceBaseline.js</value> <value>Web\js\PureFees\default\app\model\FeeRefBillingAccountType.js</value> <value>Web\js\PureFees\default\app\model\FeeConfiguration.js</value> <value>Web\js\PureFees\default\app\model\FeeType.js</value> <value>Web\js\PureFees\default\app\model\FeeRefState.js</value>
Single request Matches on page nameReads the manifest which defines the entire applicationConcatenates all the JS files into a single JS file
Application JS File
• Dynamic class loading – disabled!
• File ordering is obviously important
• Caching
• Cache busting
• Developer support
• Conceptually the same strategy applies too:- CSS files
- Language files
7
Enterprise Applications and Roles
Enterprise Applications
• What are they?- Complex data and processes
- Robust, Scalable, Performant
- Secure
• Why are roles important?
9
PureWealth Suite
Secured Content
buildItems: function () { var items = [ this.buildLeftForm(), this.buildRightForm() ]; if (this.getEditButton) { items.push(this.getEditButton()); }
return items; },
Surprisingly simple paradigmCheck for the existence of the methodIf the method exists then call it.
Role checking <secured_element> <roles> <role>fee_function_setup_accounts_add_edit</role> </roles> <script> <![CDATA[ Ext.override(PureFees.view.accounts.details.Banner, { getEditButton: function() { return { xtype: 'container', region: 'east', items: [{ xtype: 'button', handler: 'showAccountAddEditWindow' }]
Again surprisingly simpleIterate the roles assigned to userIf role found append to the app JS file
Enterprise Applications and Client Customizations
Client Customizations
• Leverage the application JS file
• Extend the paradigm utilized for roles
• Parameterize the selection of which files to deliver to the browser
14
Client Customizations
<!-- ************************************************************************ Core JS FILES ************************************************************************--> <object id= "coreJSFiles" type="System.Collections.ArrayList"> <constructor-arg name="c"> <list> <value>Web\js\PureWealth\config\environment.js</value>
<value>Web\js\PureWealth\default\app\store\BaseContactSearchResults.js</value> <value>Web\js\PureWealth\default\app\store\GroupByBreakdowns.js</value> <value>Web\js\PureWealth\clients\{0}\app\store\GroupByBreakdowns.js</value> <value>Web\js\PureWealth\default\app\store\SuperObjectPickerItems.js</value>
Iterate the list of files to serveReplace parameters with client valuesIf file exists then add to the app JS file
Client Customizations
Ext.override(PureWealth.store.GroupByBreakdowns, { config: { data: [{ // Household id: 1, name: t('pw_super_object_picker_group_by_breakdown_no'), referenceKey: PureWealth.util.Constants.getGroupByBreakdownNone(), objectTypeID: PureWealth.util.Constants.getObjectTypeIDHousehold(), financialsTabName: PureWealth.util.Constants.getFinancialsTabNameAll(), ordinal: 1 }, { id: 2,
Client overrides specific behavior in base classClient can override the class entirely if needed
Closing Remarks
Final Thoughts
• ExtJS 6 – start using it
• The role of a designer – get yourself a good one
• Training – paramount
• Sencha Professional Services – use them you will not regret it
18
The Team
Questions?
Further information:
Steven Whatmore – aka [email protected] use the SenchaCon app to review this session!
www.purefacts.com