SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
CUTTING CORNERS
 FROM A WHEEL
    // Forkito ACL //




                        FORKITO
FINAL GOAL

Easy to use and understand ACL system

Reusable ACL library compatible with most widespread Joomla
based projects




                                                              FORKITO
FORKITO ACL FLAVORS

 Ţ Joomla fork flavor (working - oh yeah)
 Ţ Molajo flavor (in progress)
 Ţ Nooku flavor (planned)




                                            FORKITO
JOOMLA FORK FLAVOR




                     FORKITO
JOOMLA FORK FLAVOR



Did he really say that?


                                  FORKITO
JOOMLA FORK FLAVOR

Starting point for the whole project.

Used as proof of concept




                                        FORKITO
Joomla fork form == contains changes to 70+ files
 due to poor Joomla ACL implementation in application layer

 Joomla - ACL hardcoded everywhere




revision 7




                                                              FORKITO
COVERED PARTS

New forkito ACL library
Joomla library methods are changed to proxies to a new library
methods

Includes internal methods that take care of backwards
compatibility with old Joomla ACL




                                                                 FORKITO
COVERED PARTS

Web application framework layer
 Ţ categories
 Ţ menus,
 Ţ modules,
 Ţ plugins

Mainly changes to multiple items queries




                                           FORKITO
COVERED PARTS

Application
 Ţ Backend components: com_categories, com_menus,
    com_modules, com_plugins
 Ţ Content components: com_content (back and frontend)
 Ţ Pagenavigation plugin-

Contains changes to 37 php and 15 xml files,
most extensive changes to com_users and com_content




                                                         FORKITO
WHERE I CAN GET IT

git clone git://git.forkito.org/forkito




                                          FORKITO
MOLAJO FLAVOR




                FORKITO
Completely new classes

Where most development goes at the moment

The most important part




                                            FORKITO
Molajo   ?   - web application layer will be completely redone
together with components - layer includes hooks for ACL plugins

Just few library overrides (JUser, JCategories, JMenu … )

Joomla compatibility methods removed – extension either uses
Joomla or Forkito ACL




                                                                  FORKITO
Molajo   ?   - web application layer will be completely redone
together with components - layer includes hooks for ACL plugins

Just few library overrides (JUser, JCategories, JMenu … )

Joomla compatibility methods removed – extension either uses
Joomla or Forkito ACL


                yes, it can be done




                                                                  FORKITO
NOOKU FLAVOR




               FORKITO
Will come after Molajo flavour

it is expected that only minor changes will be needed in Forkito
ACl for it to work with Nooku framework.

Forkito will represent an addon library here




                                                                   FORKITO
Unified ACL
// Forkito to Joomla ACL comparision//




                                         FORKITO
REMOVED VIEW ACCESS LEVELS AND ADDED VIEW TO
ACTIONS

50% less users effort needed, 50% less complicated.

View == action

No need for a separate ACL system for managing view permissions.
onfusing for the user and inefficient from the system point of view.




                                                                  FORKITO
RADICALLY IMPROVED AND SIMPLIFIED USER INTERFACE

 Ţ Simple matryx of groups and actions
 Ţ One-click permission changes
 Ţ Instantly visible changes in inherited values




                                                   FORKITO
SIMPLIFIED OPERATIONAL LOGIC

Lower level always wins
Global >Component>(Category)>(Item)

Anything set on the lower level beats what was set on the higher
one (denied or allowed)

Assigned permission beats inherited
Users are auto assigned to parent groups, so anything that is set in
parents will affect user's permissions, but only if it is not set
explicitly in assigned groups.



                                                                   FORKITO
SIMPLIFIED OPERATIONAL LOGIC

If one group gives you access you are in
(key analogy)

If you have a key that opens certain doors, it doesn't matter if
another key doesn't work, you still can get in.
When user is allowed to do something trough his membership in
one of the assigned groups, all others are irrelevant.




                                                                   FORKITO
DRY-ED AND RE-ARCHITECTURED

No code repetition
A single method for a single purpose.
Classes reusing other classes methods and not replicating them.
Very low amount of code, will cut off even more in the future.




                                                                  FORKITO
JSON ENCODED RULES REPLACED WITH PERMISSIONS
TABLE

JSON encoded string of permissions, stored in simgle database
field was one of the most horrible ideas ever seen in Joomla

This kind of code crimes should be punishable with at least 100 hits
with a stick.




                                                                  FORKITO
WHY ?
    FORKITO
It totally disables any database relations, conditional searches etc.
with enormous impact on performance.




                                                                    FORKITO
To retrieve a list of items user has a permission to view (or edit or
do any action) code would need to query for ALL items, unpack
json string item by item and check permissions each item
separately.

Now imagine you have 100.000 or even 1 million items to inspect
one by one and try to imagine how long that would take and e.g.
how much memory it would consume.

Get the picture?




                                                                        FORKITO
Having JSON in a database == a performance problem

=> you need more efficient system for managing thousands of
users trying to view pages

=> you "solve" the problem by inventing another ACL system
called access levels




                                                              FORKITO
ALWAYS PRESENT BASIC SYSTEM GROUPS

Groups that cannot be removed or their role changed

While this might seem like a backwards step, this groups are really
corner stones that CMS ACL cannot work without. Equivalent to
unix wheel and anonymous groups roles.

Having groups system can always rely on -> RELIABILITY,
better performance and better security

// including root configuration hack that is not need anymore //



                                                                   FORKITO
ALWAYS PRESENT BASIC SYSTEM GROUPS

Everyone
- Not-authenticated - anonymous visitors
- Authenticated – anyone that is logged in
-- Admins – replacing global core.admin permission (equivalent to
unix wheel group)




                                                                    FORKITO
Simple API
// Hod do I implement it //




                              FORKITO
API GOAL

Create minimal number of humanly understandable (self
explaining) classes and method names.




                                                        FORKITO
CHECK AUTHORIZATION - MACCESS CLASS

Check single item's authorization :

isUserAuthorizedTo

+ shortcut: isUserAuthorisedToView




                                      FORKITO
CHECK AUTHORIZATION - MACCESS CLASS

Check multiple items authorization (by automatically inserting
filtering sql in multiple items queries):

insertFilterQuery




                                                                 FORKITO
MULTIPLE ITEMS AUTHORIZATION EXAMPLE

JPluginHelper::_load()

Joomla
$levels = implode(',', $user->getAuthorisedViewLevels());
...
$query->select('folder AS type, element AS name, params')
->from('#__extensions')
->where('enabled >= 1')
->where('type ='.$db->Quote('plugin'))
->where('state >= 0')
->where('access IN ('.$levels.')')
->order('ordering');




                                                            FORKITO
MULTIPLE ITEMS AUTHORIZATION EXAMPLE

Forkito ACL

$query->select('e.folder AS type, e.element AS name, e.params, e.extension_id,
e.asset_id')
->from('#__extensions AS e')
->where('enabled >= 1')
->where('type ='.$db->Quote('plugin'))
->where('state >= 0')
->order('ordering');

jimport('molajo.access.access');
MAccess::insertFilterQuery($db, $query, 'e.asset_id', 'core.view');



                                                                                 FORKITO
MULTIPLE ITEMS AUTHORIZATION EXAMPLE

The same function is used in categories helper, modules helper,
com_content articles model – anywhere where list of items needs
to be filtered




                                                                  FORKITO
USER INTERFACE

Insert acl widget HTML: MHtmlPermissions::aclWidget

Get ready-made acl widget in shape of Joomla form field:
MFormFieldAclwidget

Very simple to include ACL widget in your component layout




                                                             FORKITO
Future
// Short term //




                   FORKITO
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.
Testing, testing. Bugfixing.
Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing.



                                                              FORKITO
USER INTERFACE IMPROVEMENT

Inheritance breadcrumbs - show what this level is inheriting from




                                                                FORKITO
Future
// Long term //




                  FORKITO
MORE ROUNDS OF SIMPLIFICATION

Simple mode - flatten inheritance , keep only default and category
(or item) permissions




                                                                     FORKITO

Weitere ähnliche Inhalte

Andere mochten auch

Molajo - Joomla based distributions
Molajo - Joomla based distributionsMolajo - Joomla based distributions
Molajo - Joomla based distributionskauselot
 
Regents Bangkok
Regents BangkokRegents Bangkok
Regents Bangkokjhortop
 
Turbocharging your extension // Joomla //
Turbocharging your extension // Joomla //Turbocharging your extension // Joomla //
Turbocharging your extension // Joomla //kauselot
 
Disney World 2010v4
Disney World 2010v4Disney World 2010v4
Disney World 2010v4ChristinaCo
 
Disney World 2010v3
Disney World 2010v3Disney World 2010v3
Disney World 2010v3ChristinaCo
 
Joomla 1.6. caching implemented #jab11
Joomla 1.6. caching implemented #jab11Joomla 1.6. caching implemented #jab11
Joomla 1.6. caching implemented #jab11kauselot
 

Andere mochten auch (7)

Molajo - Joomla based distributions
Molajo - Joomla based distributionsMolajo - Joomla based distributions
Molajo - Joomla based distributions
 
Regents Bangkok
Regents BangkokRegents Bangkok
Regents Bangkok
 
Turbocharging your extension // Joomla //
Turbocharging your extension // Joomla //Turbocharging your extension // Joomla //
Turbocharging your extension // Joomla //
 
Kis Sc
Kis ScKis Sc
Kis Sc
 
Disney World 2010v4
Disney World 2010v4Disney World 2010v4
Disney World 2010v4
 
Disney World 2010v3
Disney World 2010v3Disney World 2010v3
Disney World 2010v3
 
Joomla 1.6. caching implemented #jab11
Joomla 1.6. caching implemented #jab11Joomla 1.6. caching implemented #jab11
Joomla 1.6. caching implemented #jab11
 

Ähnlich wie Cutting corners from a wheel -

Enrich your extensions with Joomla! ACL support
Enrich your extensions with Joomla! ACL supportEnrich your extensions with Joomla! ACL support
Enrich your extensions with Joomla! ACL supportSander Potjer
 
Justin Herrin Comparing Joomla CCKs from jd12ne
Justin Herrin Comparing Joomla CCKs from jd12neJustin Herrin Comparing Joomla CCKs from jd12ne
Justin Herrin Comparing Joomla CCKs from jd12neJustin Herrin
 
Using spl tools in your code
Using spl tools in your codeUsing spl tools in your code
Using spl tools in your codeElizabeth Smith
 
What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?Rouven Weßling
 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...Vincenzo Barone
 
jQuery Tips Tricks Trivia
jQuery Tips Tricks TriviajQuery Tips Tricks Trivia
jQuery Tips Tricks TriviaCognizant
 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Rhinofly
 
Introduction to building joomla! components using FOF
Introduction to building joomla! components using FOFIntroduction to building joomla! components using FOF
Introduction to building joomla! components using FOFTim Plummer
 
Alfresco monitoring with Nagios and ELK stack
Alfresco monitoring with Nagios and ELK stackAlfresco monitoring with Nagios and ELK stack
Alfresco monitoring with Nagios and ELK stackCesar Capillas
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development Mage Guru
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipseanshunjain
 
Developing Joomla Extensions JUG Bangladesh meetup dhaka-2012
Developing Joomla Extensions JUG  Bangladesh meetup dhaka-2012Developing Joomla Extensions JUG  Bangladesh meetup dhaka-2012
Developing Joomla Extensions JUG Bangladesh meetup dhaka-2012Sabuj Kundu
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4Jjkumaranc
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4Jjkumaranc
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4Jjkumaranc
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4Jjkumaranc
 
Improved Joomla! 3.6 Updates
Improved Joomla! 3.6 UpdatesImproved Joomla! 3.6 Updates
Improved Joomla! 3.6 UpdatesSynapseIndia
 

Ähnlich wie Cutting corners from a wheel - (20)

Enrich your extensions with Joomla! ACL support
Enrich your extensions with Joomla! ACL supportEnrich your extensions with Joomla! ACL support
Enrich your extensions with Joomla! ACL support
 
Justin Herrin Comparing Joomla CCKs from jd12ne
Justin Herrin Comparing Joomla CCKs from jd12neJustin Herrin Comparing Joomla CCKs from jd12ne
Justin Herrin Comparing Joomla CCKs from jd12ne
 
Using spl tools in your code
Using spl tools in your codeUsing spl tools in your code
Using spl tools in your code
 
What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?What is the Joomla Framework and why do we need it?
What is the Joomla Framework and why do we need it?
 
Dolibarr module development
Dolibarr module developmentDolibarr module development
Dolibarr module development
 
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...David Rey   Lessons Learned   Updating Content Licensing To Be Plone 3 Compat...
David Rey Lessons Learned Updating Content Licensing To Be Plone 3 Compat...
 
AtoZ about TYPO3 v8 CMS
AtoZ about TYPO3 v8 CMSAtoZ about TYPO3 v8 CMS
AtoZ about TYPO3 v8 CMS
 
jQuery Tips Tricks Trivia
jQuery Tips Tricks TriviajQuery Tips Tricks Trivia
jQuery Tips Tricks Trivia
 
Railo Presentation Railo 3.1
Railo Presentation Railo 3.1Railo Presentation Railo 3.1
Railo Presentation Railo 3.1
 
Introduction to building joomla! components using FOF
Introduction to building joomla! components using FOFIntroduction to building joomla! components using FOF
Introduction to building joomla! components using FOF
 
Alfresco monitoring with Nagios and ELK stack
Alfresco monitoring with Nagios and ELK stackAlfresco monitoring with Nagios and ELK stack
Alfresco monitoring with Nagios and ELK stack
 
Mageguru - magento custom module development
Mageguru -  magento custom module development Mageguru -  magento custom module development
Mageguru - magento custom module development
 
Understanding Framework Architecture using Eclipse
Understanding Framework Architecture using EclipseUnderstanding Framework Architecture using Eclipse
Understanding Framework Architecture using Eclipse
 
Developing Joomla Extensions JUG Bangladesh meetup dhaka-2012
Developing Joomla Extensions JUG  Bangladesh meetup dhaka-2012Developing Joomla Extensions JUG  Bangladesh meetup dhaka-2012
Developing Joomla Extensions JUG Bangladesh meetup dhaka-2012
 
KAAccessControl
KAAccessControlKAAccessControl
KAAccessControl
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
LOGBack and SLF4J
LOGBack and SLF4JLOGBack and SLF4J
LOGBack and SLF4J
 
Improved Joomla! 3.6 Updates
Improved Joomla! 3.6 UpdatesImproved Joomla! 3.6 Updates
Improved Joomla! 3.6 Updates
 

Kürzlich hochgeladen

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 

Kürzlich hochgeladen (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 

Cutting corners from a wheel -

  • 1. CUTTING CORNERS FROM A WHEEL // Forkito ACL // FORKITO
  • 2. FINAL GOAL Easy to use and understand ACL system Reusable ACL library compatible with most widespread Joomla based projects FORKITO
  • 3. FORKITO ACL FLAVORS Ţ Joomla fork flavor (working - oh yeah) Ţ Molajo flavor (in progress) Ţ Nooku flavor (planned) FORKITO
  • 5. JOOMLA FORK FLAVOR Did he really say that? FORKITO
  • 6. JOOMLA FORK FLAVOR Starting point for the whole project. Used as proof of concept FORKITO
  • 7. Joomla fork form == contains changes to 70+ files due to poor Joomla ACL implementation in application layer Joomla - ACL hardcoded everywhere revision 7 FORKITO
  • 8. COVERED PARTS New forkito ACL library Joomla library methods are changed to proxies to a new library methods Includes internal methods that take care of backwards compatibility with old Joomla ACL FORKITO
  • 9. COVERED PARTS Web application framework layer Ţ categories Ţ menus, Ţ modules, Ţ plugins Mainly changes to multiple items queries FORKITO
  • 10. COVERED PARTS Application Ţ Backend components: com_categories, com_menus, com_modules, com_plugins Ţ Content components: com_content (back and frontend) Ţ Pagenavigation plugin- Contains changes to 37 php and 15 xml files, most extensive changes to com_users and com_content FORKITO
  • 11. WHERE I CAN GET IT git clone git://git.forkito.org/forkito FORKITO
  • 12. MOLAJO FLAVOR FORKITO
  • 13. Completely new classes Where most development goes at the moment The most important part FORKITO
  • 14. Molajo ? - web application layer will be completely redone together with components - layer includes hooks for ACL plugins Just few library overrides (JUser, JCategories, JMenu … ) Joomla compatibility methods removed – extension either uses Joomla or Forkito ACL FORKITO
  • 15. Molajo ? - web application layer will be completely redone together with components - layer includes hooks for ACL plugins Just few library overrides (JUser, JCategories, JMenu … ) Joomla compatibility methods removed – extension either uses Joomla or Forkito ACL yes, it can be done FORKITO
  • 16. NOOKU FLAVOR FORKITO
  • 17. Will come after Molajo flavour it is expected that only minor changes will be needed in Forkito ACl for it to work with Nooku framework. Forkito will represent an addon library here FORKITO
  • 18. Unified ACL // Forkito to Joomla ACL comparision// FORKITO
  • 19. REMOVED VIEW ACCESS LEVELS AND ADDED VIEW TO ACTIONS 50% less users effort needed, 50% less complicated. View == action No need for a separate ACL system for managing view permissions. onfusing for the user and inefficient from the system point of view. FORKITO
  • 20. RADICALLY IMPROVED AND SIMPLIFIED USER INTERFACE Ţ Simple matryx of groups and actions Ţ One-click permission changes Ţ Instantly visible changes in inherited values FORKITO
  • 21. SIMPLIFIED OPERATIONAL LOGIC Lower level always wins Global >Component>(Category)>(Item) Anything set on the lower level beats what was set on the higher one (denied or allowed) Assigned permission beats inherited Users are auto assigned to parent groups, so anything that is set in parents will affect user's permissions, but only if it is not set explicitly in assigned groups. FORKITO
  • 22. SIMPLIFIED OPERATIONAL LOGIC If one group gives you access you are in (key analogy) If you have a key that opens certain doors, it doesn't matter if another key doesn't work, you still can get in. When user is allowed to do something trough his membership in one of the assigned groups, all others are irrelevant. FORKITO
  • 23. DRY-ED AND RE-ARCHITECTURED No code repetition A single method for a single purpose. Classes reusing other classes methods and not replicating them. Very low amount of code, will cut off even more in the future. FORKITO
  • 24. JSON ENCODED RULES REPLACED WITH PERMISSIONS TABLE JSON encoded string of permissions, stored in simgle database field was one of the most horrible ideas ever seen in Joomla This kind of code crimes should be punishable with at least 100 hits with a stick. FORKITO
  • 25. WHY ? FORKITO
  • 26. It totally disables any database relations, conditional searches etc. with enormous impact on performance. FORKITO
  • 27. To retrieve a list of items user has a permission to view (or edit or do any action) code would need to query for ALL items, unpack json string item by item and check permissions each item separately. Now imagine you have 100.000 or even 1 million items to inspect one by one and try to imagine how long that would take and e.g. how much memory it would consume. Get the picture? FORKITO
  • 28. Having JSON in a database == a performance problem => you need more efficient system for managing thousands of users trying to view pages => you "solve" the problem by inventing another ACL system called access levels FORKITO
  • 29. ALWAYS PRESENT BASIC SYSTEM GROUPS Groups that cannot be removed or their role changed While this might seem like a backwards step, this groups are really corner stones that CMS ACL cannot work without. Equivalent to unix wheel and anonymous groups roles. Having groups system can always rely on -> RELIABILITY, better performance and better security // including root configuration hack that is not need anymore // FORKITO
  • 30. ALWAYS PRESENT BASIC SYSTEM GROUPS Everyone - Not-authenticated - anonymous visitors - Authenticated – anyone that is logged in -- Admins – replacing global core.admin permission (equivalent to unix wheel group) FORKITO
  • 31. Simple API // Hod do I implement it // FORKITO
  • 32. API GOAL Create minimal number of humanly understandable (self explaining) classes and method names. FORKITO
  • 33. CHECK AUTHORIZATION - MACCESS CLASS Check single item's authorization : isUserAuthorizedTo + shortcut: isUserAuthorisedToView FORKITO
  • 34. CHECK AUTHORIZATION - MACCESS CLASS Check multiple items authorization (by automatically inserting filtering sql in multiple items queries): insertFilterQuery FORKITO
  • 35. MULTIPLE ITEMS AUTHORIZATION EXAMPLE JPluginHelper::_load() Joomla $levels = implode(',', $user->getAuthorisedViewLevels()); ... $query->select('folder AS type, element AS name, params') ->from('#__extensions') ->where('enabled >= 1') ->where('type ='.$db->Quote('plugin')) ->where('state >= 0') ->where('access IN ('.$levels.')') ->order('ordering'); FORKITO
  • 36. MULTIPLE ITEMS AUTHORIZATION EXAMPLE Forkito ACL $query->select('e.folder AS type, e.element AS name, e.params, e.extension_id, e.asset_id') ->from('#__extensions AS e') ->where('enabled >= 1') ->where('type ='.$db->Quote('plugin')) ->where('state >= 0') ->order('ordering'); jimport('molajo.access.access'); MAccess::insertFilterQuery($db, $query, 'e.asset_id', 'core.view'); FORKITO
  • 37. MULTIPLE ITEMS AUTHORIZATION EXAMPLE The same function is used in categories helper, modules helper, com_content articles model – anywhere where list of items needs to be filtered FORKITO
  • 38. USER INTERFACE Insert acl widget HTML: MHtmlPermissions::aclWidget Get ready-made acl widget in shape of Joomla form field: MFormFieldAclwidget Very simple to include ACL widget in your component layout FORKITO
  • 39. Future // Short term // FORKITO
  • 40. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. Testing, testing. Bugfixing. Testing. Bugfixing. Bugfixing. Testing. Testing. Bugfixing. FORKITO
  • 41. USER INTERFACE IMPROVEMENT Inheritance breadcrumbs - show what this level is inheriting from FORKITO
  • 42. Future // Long term // FORKITO
  • 43. MORE ROUNDS OF SIMPLIFICATION Simple mode - flatten inheritance , keep only default and category (or item) permissions FORKITO