SlideShare a Scribd company logo
Flexible & Repeatable
Permissions Management
with ACL Templates
Jeff Potts
Learn. Connect. Collaborate.
Alfresco is missing a feature: ACL Templates
• Many projects start with a spreadsheet that organizes folder structure
• The next step is often defining the permissions that go with that structure
• Usually, permissions are applied in a consistent, predictable way
according to business rules
Learn. Connect. Collaborate.
Don’t Repeat Yourself
• When you programmatically create nodes and set permissions, it is
tempting to just make a bunch of API calls and be done
• What happens when you need to set permissions in different places?
– JavaScript versus Java
– Actions versus Behaviors
– Workflows
– Yes, you can centralize this logic in a common “service” class, but…
Learn. Connect. Collaborate.
If it might change, why is it in code?
• What happens when the business rules change and a power user wants to
change how permissions are set?
• Build and deploy just because an entry in an ACL is changing from
“Collaborator” to “Consumer”?
• Yuck

Recommended for you

Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdf

The document discusses Apache Camel, an open-source integration library that can be used to integrate disparate systems that use different protocols and data formats. It provides an overview of what integration is, describes how Camel works using a domain-specific language and components, and demonstrates how to define simple routes using Java or XML. The presentation concludes with information on management and tooling support for Camel.

camelesbintegration
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)

This is the slide deck of my lightning talk at Alfresco Devcon 2019 in Edinburgh. The talk was held in a slot with 4 other presenters, and the recording should be available on YouTube sometime in February.

alfrescodevconlightningtalk
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2

My talk from Red Hat Summit 2015 about the pros/cons of microservices, how integration is a strong requirement for doing distributed systems designs, and how open source projects like Apache Camel, Docker, Kubernetes, OpenShift and Fabric8 can help simplify and manage microservice environments

microservicesapache cameldevops
Learn. Connect. Collaborate.
How Does Everyone Else Do It?
• Many ECM systems allow permission sets to be declared, then applied
when needed
• Now you can do that with Alfresco
• I give you Alfresco ACL Templates!
– https://github.com/conexiam/alfresco-acl-templates
• Dun dun DUN!!!
1
Learn. Connect. Collaborate.
Example: Folders that hold files related to client
projects
• /Project 1 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 2 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 3 for Client B
– /Design Discussion
– /Final Deliverables
– /Status Reports
Project 1 Team: Collaborator
Client A Team: Collaborator
Project 2 Team: Collaborator
Client A Team: Consumer
Project 1 Team: Collaborator
Client A Team: Consumer
Project 2 Team: Collaborator
Client A Team: Collaborator
Project 3 Team: Collaborator
Client B Team: Consumer
Project 3 Team: Collaborator
Client B Team: Collaborator
Learn. Connect. Collaborate.
I see a pattern!
• /Project 1 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 2 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 3 for Client B
– /Design Discussion
– /Final Deliverables
– /Status Reports
Project 1 Team: Collaborator
Client A Team: Collaborator
Project 2 Team: Collaborator
Client A Team: Consumer
Project 1 Team: Collaborator
Client A Team: Consumer
Project 2 Team: Collaborator
Client A Team: Collaborator
Project 3 Team: Collaborator
Client B Team: Consumer
Project 3 Team: Collaborator
Client B Team: Collaborator
There is a group for a
project that is always the
collaborator.
There is a group for the
client that is a Collaborator
on some folders and a
Consumer on other
folders.
That’s potentially two
“templates”
Learn. Connect. Collaborate.
A Wrinkle: Group can’t be determined at design-time
• /Project 1 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 2 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 3 for Client B
– /Design Discussion
– /Final Deliverables
– /Status Reports
Project 1 Team: Collaborator
Client A Team: Collaborator
Project 2 Team: Collaborator
Client A Team: Consumer
Project 1 Team: Collaborator
Client A Team: Consumer
Project 2 Team: Collaborator
Client A Team: Collaborator
Project 3 Team: Collaborator
Client B Team: Consumer
Project 3 Team: Collaborator
Client B Team: Collaborator
Uh-oh, variability!

Recommended for you

Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication

APS 2 comes with new modern and powerful tools built using ADF to model and deploy cloud native process applications, let’s run through what’s in an app with a simple and fun example, ordering beers for your office.

alfrescoalfrescoprocessservicesalfrescodevcon
12-factor-jruby
12-factor-jruby12-factor-jruby
12-factor-jruby

The document discusses the 12 factor app methodology for building software-as-a-service applications. It covers the 12 factors which are codebase, dependencies, configuration, backing services, build/release/run, processes, port binding, concurrency, disposability, development/production parity, logs, and admin processes. The presentation provides examples and explanations of how to design apps adhering to these 12 factors for scalability, maintainability and portability.

In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember Data

A few months after I started working with Ember.js & Ember Data at my new job we began a project to upgrade both. There were parts that were a breeze and others that were quite tricky. This talk walks you through some of the challenges we faced and how we solved them as well as how we began to prepare for the Ember 2.x architectural shift. Hopefully this talk will help save you some time when you decide to upgrade your Ember web application.

ember dataember.jsember
Learn. Connect. Collaborate.
Another Wrinkle: Time
2
• /Project 1 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 2 for Client A
– /Design Discussion
– /Final Deliverables
– /Status Reports
• /Project 3 for Client B
– /Design Discussion
– /Final Deliverables
– /Status Reports
Project 1 Team: Collaborator
Client A Team: Collaborator
Project 2 Team: Collaborator
Client A Team: Consumer
Project 1 Team: Collaborator
Client A Team: Consumer
Project 2 Team: Collaborator
Client A Team: Collaborator
Project 3 Team: Collaborator
Client B Team: Consumer
Project 3 Team: Collaborator
Client B Team: Collaborator
Project 1 Team: Consumer
Client A Team: Consumer
Project 2 Team: Consumer
Client A Team: Consumer
Project 1 Team: Consumer
Client A Team: Consumer
Project 2 Team: Consumer
Client A Team: Consumer
Project 3 Team: Consumer
Client B Team: Consumer
Project 3 Team: Consumer
Client B Team: Consumer
Active Projects Completed Projects
Learn. Connect. Collaborate.
Alfresco ACL Templates Add-On
• Open source project sponsored by a client called Conexiam
– I maintain it on their behalf at Github
• Allows you to declare ACL templates as JSON
– ACL Templates live in the Data Dictionary
• Provides an “ACL Template Service” that you can call from JavaScript or
Java to “apply” a template to a node
Learn. Connect. Collaborate.
Example #1: Static ACL Template
{
"inherit": false,
"permissions": [
{
"authority": ”GROUP_Project 1 Team",
"permission": "Collaborator”
},
{
"authority": ”GROUP_Client A Team",
"permission": "Collaborator”
}
]
}
Learn. Connect. Collaborate.
Example #2: Applying an ACL Template
import com.conexiam.acl.templates.service.AclTemplateService;
…SNIP…
AclTemplateService aclTemplateService;
…SNIP…
aclTemplateService.apply("test-template-2.json", testFolder);

Recommended for you

Apigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM iApigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM i

Start future-proofing your business logic by building web APIs. Do you think it’s too hard and time-consuming? Zend has made the process easier by releasing Apigility, a free and open source tool that helps us create Zend Framework 2 back-ends ready to be consumed by desktop, mobile, the internet of things, or anything else that comes along. This session is a step-by-step tutorial. Thus I’ll be using Apigility to create an API that accesses RPG business logic via the PHP Toolkit so you can hit the ground running.

apigilityibm iibm i toolkit
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift

What are and aren't microservices? Microservices is a validation of the open-source approach to integration and service implementation and a rebuff of the committee-driven SOA approach. In this

Apigility-powered API's on IBM i
Apigility-powered API's on IBM iApigility-powered API's on IBM i
Apigility-powered API's on IBM i

This document discusses Apigility-powered RESTful APIs on IBM i systems. It covers API concepts, installing Apigility, creating RESTful web services, using the Apigility toolkit, and error handling. The presentation discusses installing Apigility locally or remotely, designing URI patterns, using the admin interface to create services, adding database and toolkit services, and calling the toolkit from PHP, CL, and RPG code. It also provides tips on best practices like abstracting toolkit calls and using commands and queries.

phpibm i toolkitapigility
Learn. Connect. Collaborate.
Example #3: An ACL template with placeholders
3
{
"inherit": false,
"permissions": [
{
"authorityTemplate": ”project-team",
"permission": "Collaborator”
},
{
"authorityTemplate": ”client-team",
"permission": "Collaborator”
}
]
}
Learn. Connect. Collaborate.
How do those placeholders work?
• Can specify an authorityTemplate instead of a hard-coded authority
• An authorityTemplate is just a Spring Bean that resolves an authority
template to an actual authority
• Examples:
– What is the correct “project group” for this site?
– What is the correct “client group” for this site?
– Basically anything that can use the nodeRef to resolve the template
Learn. Connect. Collaborate.
Add-on ships with one sample authority template
resolver
• Site role group resolver
• Returns the site group for a given role
• Example: Always give the Site Collaborator group for this site Consumer
access
• Making your own authority template resolvers is easy
Learn. Connect. Collaborate.
Implementing your own authority resolver
• Create a Java class that implements AuthorityResolver
• Inject your dependencies
• Implement public String resolve(NodeRef nodeRef)
• Config in Spring context XML
• Add to authorityResolvers map

Recommended for you

Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138

This document discusses best practices for implementing Solr sharding in Alfresco. It defines what sharding is and explains that it involves splitting a single index into multiple parts or shards to improve search performance, distribute indexing load, and scale horizontally. The document outlines different types of sharding, considerations for the number of shards, high availability, backup procedures, and common configuration settings when using Solr sharding in Alfresco.

alfrescodevconalfrescosolr sharding alfresco
Microservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesMicroservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and Kubernetes

Building microservices requires more than just infrastructure, but infrastructure does have a role. In this talk we look at microservices from an enterprise perspective and talk about DDD, Docker, Kubernetes and how established open-source projects in the integration space fits a microservices architecture

dockermicroserviceskubernetes
Cloud Native Camel Riding
Cloud Native Camel RidingCloud Native Camel Riding
Cloud Native Camel Riding

Using apache camel for microservices and integration then deploying and managing on Docker and Kubernetes. When we need to make changes to our app, we can use Fabric8 continuous delivery built on top of Kubernetes and OpenShift.

camelfabric8distributed systems
Learn. Connect. Collaborate.
Example: Site Role Group Authority Resolver
4
<bean
id="authority-template.site-manager-group”
class="com.conexiam.acl.templates.authority.resolvers.SiteRole
GroupResolver">
<property name="siteService">
<ref bean="SiteService" />
</property>
<property name="role" value="SiteManager" />
</bean>
Learn. Connect. Collaborate.
Example: Site Role Group Authority Resolver
public String resolve(NodeRef nodeRef) {
SiteInfo siteInfo = siteService.getSite(nodeRef);
if (siteInfo == null) {
return null;
}
String siteId = siteInfo.getShortName();
String siteRoleGroup = siteService.getSiteRoleGroup(siteId,
role);
return siteRoleGroup;
}
Learn. Connect. Collaborate.
Summary
• ACL Templates Add-on
• Declare permissions in JSON, store in Data Dictionary
• Apply permissions using ACL Template Service
• Removes permission logic from code
• Makes it easier for non-technical people to change the permissions your
code sets on nodes it creates
Learn. Connect. Collaborate.
Summary
• ACL Templates can have hard-coded authorities, authority templates, or a
mix of both
• Authority templates are resolved with the help of an authority template
resolver class
– Can use properties on the node, or other services to help determine the right
authority

Recommended for you

12 Factor Scala
12 Factor Scala12 Factor Scala
12 Factor Scala

The document discusses best practices for building and deploying Scala applications based on the 12 Factor App methodology. It covers topics like managing dependencies, separating configuration from code, building in a simple and automated way, scaling apps through stateless processes, achieving parity between development and production environments, and running admin tasks isolated from the main app. The presentation provides examples using tools like sbt, Dropwizard, and Heroku to demonstrate how to structure Scala apps according to the 12 factors.

gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20

The document discusses different API technologies including gRPC, GraphQL, and REST. It provides overviews of each technology, describing their origins, key concepts, pros, and cons. gRPC was developed by Google and uses protocol buffers for messages and HTTP/2 for transport. GraphQL was created by Facebook and uses a query language for clients to specify the exact data they need. REST is the more established standard based on HTTP and uses URIs for identification of resources.

apiconferenceberlin
Fuse integration-services
Fuse integration-servicesFuse integration-services
Fuse integration-services

Making it easy to integrate legacy and iterative microservices with REST/CQRS and deploy to Docker/Kubernetes/OpenShift all on a developer laptop!

dockermicroservicesactivemq
Learn. Connect. Collaborate.
Support the Community!
• This add-on was funded by a Metaversant client called Conexiam
• Per their request, we did all of their Alfresco customizations in the open
• Check out the other related repositories at https://github.com/Conexiam
• Let me know if you have any questions!
• @jeffpotts01
Flexible & Repeatable
Permissions Management
with ACL Templates
Thank you!
@jeffpotts01

More Related Content

What's hot

Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration Talk
Christian Posta
 
Polyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQPolyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQ
Christian Posta
 
Solving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache CamelSolving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache Camel
Christian Posta
 
Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdf
Christian Posta
 
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Axel Faust
 
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2
Christian Posta
 
Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
Marcello Teodori
 
12-factor-jruby
12-factor-jruby12-factor-jruby
12-factor-jruby
Joe Kutner
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
Stacy London
 
Apigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM iApigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM i
chukShirley
 
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Christian Posta
 
Apigility-powered API's on IBM i
Apigility-powered API's on IBM iApigility-powered API's on IBM i
Apigility-powered API's on IBM i
chukShirley
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138
Jose Portillo
 
Microservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesMicroservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and Kubernetes
Christian Posta
 
Cloud Native Camel Riding
Cloud Native Camel RidingCloud Native Camel Riding
Cloud Native Camel Riding
Christian Posta
 
12 Factor Scala
12 Factor Scala12 Factor Scala
12 Factor Scala
Joe Kutner
 
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
Phil Wilkins
 
Fuse integration-services
Fuse integration-servicesFuse integration-services
Fuse integration-services
Christian Posta
 
Java one kubernetes, jenkins and microservices
Java one   kubernetes, jenkins and microservicesJava one   kubernetes, jenkins and microservices
Java one kubernetes, jenkins and microservices
Christian Posta
 
Merging two big Symfony based applications - SymfonyCon 2017
Merging two big Symfony based applications - SymfonyCon 2017Merging two big Symfony based applications - SymfonyCon 2017
Merging two big Symfony based applications - SymfonyCon 2017
Ivo Lukac
 

What's hot (20)

Chicago Microservices Integration Talk
Chicago Microservices Integration TalkChicago Microservices Integration Talk
Chicago Microservices Integration Talk
 
Polyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQPolyglot Messaging with Apache ActiveMQ
Polyglot Messaging with Apache ActiveMQ
 
Solving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache CamelSolving Enterprise Integration with Apache Camel
Solving Enterprise Integration with Apache Camel
 
Simplify integrations-final-pdf
Simplify integrations-final-pdfSimplify integrations-final-pdf
Simplify integrations-final-pdf
 
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
Alfresco Devcon 2019 - Lightning Talk - Not-so-smart folders made smart(er)
 
Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2Microservices with Apache Camel, Docker and Fabric8 v2
Microservices with Apache Camel, Docker and Fabric8 v2
 
Anatomy of an APS 2 appication
Anatomy of an APS 2 appicationAnatomy of an APS 2 appication
Anatomy of an APS 2 appication
 
12-factor-jruby
12-factor-jruby12-factor-jruby
12-factor-jruby
 
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember DataIn The Trenches With Tomster, Upgrading Ember.js & Ember Data
In The Trenches With Tomster, Upgrading Ember.js & Ember Data
 
Apigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM iApigility-Powered APIs on IBM i
Apigility-Powered APIs on IBM i
 
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShiftReal-world #microservices with Apache Camel, Fabric8, and OpenShift
Real-world #microservices with Apache Camel, Fabric8, and OpenShift
 
Apigility-powered API's on IBM i
Apigility-powered API's on IBM iApigility-powered API's on IBM i
Apigility-powered API's on IBM i
 
Jose portillo dev con presentation 1138
Jose portillo   dev con presentation 1138Jose portillo   dev con presentation 1138
Jose portillo dev con presentation 1138
 
Microservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and KubernetesMicroservices with Apache Camel, DDD, and Kubernetes
Microservices with Apache Camel, DDD, and Kubernetes
 
Cloud Native Camel Riding
Cloud Native Camel RidingCloud Native Camel Riding
Cloud Native Camel Riding
 
12 Factor Scala
12 Factor Scala12 Factor Scala
12 Factor Scala
 
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
gRPC, GraphQL, REST - Which API Tech to use - API Conference Berlin oct 20
 
Fuse integration-services
Fuse integration-servicesFuse integration-services
Fuse integration-services
 
Java one kubernetes, jenkins and microservices
Java one   kubernetes, jenkins and microservicesJava one   kubernetes, jenkins and microservices
Java one kubernetes, jenkins and microservices
 
Merging two big Symfony based applications - SymfonyCon 2017
Merging two big Symfony based applications - SymfonyCon 2017Merging two big Symfony based applications - SymfonyCon 2017
Merging two big Symfony based applications - SymfonyCon 2017
 

Similar to Flexible Permissions Management with ACL Templates

565847651-Az-400t00a-Enu-Powerpoint-05.pptx
565847651-Az-400t00a-Enu-Powerpoint-05.pptx565847651-Az-400t00a-Enu-Powerpoint-05.pptx
565847651-Az-400t00a-Enu-Powerpoint-05.pptx
CharlstonMVita
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagy
Skills Matter
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
toddbr
 
Mcknight well built extensions
Mcknight well built extensionsMcknight well built extensions
Mcknight well built extensions
Richard McKnight
 
Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
 Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9... Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
WebStackAcademy
 
Agile Secure Cloud Application Development Management
Agile Secure Cloud Application Development ManagementAgile Secure Cloud Application Development Management
Agile Secure Cloud Application Development Management
Adam Getchell
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
Sumit Arora
 
Alfresco Mvc - a seamless integration with Spring Mvc
Alfresco Mvc - a seamless integration with Spring MvcAlfresco Mvc - a seamless integration with Spring Mvc
Alfresco Mvc - a seamless integration with Spring Mvc
Daniel Gradecak
 
The State of OpenStack Product Management
The State of OpenStack Product ManagementThe State of OpenStack Product Management
The State of OpenStack Product Management
Tesora
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
Damien Magoni
 
Software Design Patterns. Part I :: Structural Patterns
Software Design Patterns. Part I :: Structural PatternsSoftware Design Patterns. Part I :: Structural Patterns
Software Design Patterns. Part I :: Structural Patterns
Sergey Aganezov
 
SEppt
SEpptSEppt
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
apidays
 
29.4 mb
29.4 mb29.4 mb
29.4 mb
PM_slideshare
 
29.4 Mb
29.4 Mb29.4 Mb
29.4 Mb
guru100
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
MongoDB
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
Mert Çalışkan
 
Introduction to Agile Software Development Process
Introduction to Agile Software Development ProcessIntroduction to Agile Software Development Process
Introduction to Agile Software Development Process
Software Park Thailand
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
Thomas Daly
 
Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)
stanbridge
 

Similar to Flexible Permissions Management with ACL Templates (20)

565847651-Az-400t00a-Enu-Powerpoint-05.pptx
565847651-Az-400t00a-Enu-Powerpoint-05.pptx565847651-Az-400t00a-Enu-Powerpoint-05.pptx
565847651-Az-400t00a-Enu-Powerpoint-05.pptx
 
Tech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagyTech talk specflow_bddx_hassa_nagy
Tech talk specflow_bddx_hassa_nagy
 
Automated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choiceAutomated Acceptance Tests & Tool choice
Automated Acceptance Tests & Tool choice
 
Mcknight well built extensions
Mcknight well built extensionsMcknight well built extensions
Mcknight well built extensions
 
Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
 Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9... Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
Web Component Development Using Servlet & JSP Technologies (EE6) - Chapter 9...
 
Agile Secure Cloud Application Development Management
Agile Secure Cloud Application Development ManagementAgile Secure Cloud Application Development Management
Agile Secure Cloud Application Development Management
 
Opendaylight SDN Controller
Opendaylight SDN ControllerOpendaylight SDN Controller
Opendaylight SDN Controller
 
Alfresco Mvc - a seamless integration with Spring Mvc
Alfresco Mvc - a seamless integration with Spring MvcAlfresco Mvc - a seamless integration with Spring Mvc
Alfresco Mvc - a seamless integration with Spring Mvc
 
The State of OpenStack Product Management
The State of OpenStack Product ManagementThe State of OpenStack Product Management
The State of OpenStack Product Management
 
The Meteor Framework
The Meteor FrameworkThe Meteor Framework
The Meteor Framework
 
Software Design Patterns. Part I :: Structural Patterns
Software Design Patterns. Part I :: Structural PatternsSoftware Design Patterns. Part I :: Structural Patterns
Software Design Patterns. Part I :: Structural Patterns
 
SEppt
SEpptSEppt
SEppt
 
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
Apidays Paris 2023 - AsyncAPI For Platform Self-Service, João Dias and Rui Eu...
 
29.4 mb
29.4 mb29.4 mb
29.4 mb
 
29.4 Mb
29.4 Mb29.4 Mb
29.4 Mb
 
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
Socialite, the Open Source Status Feed Part 1: Design Overview and Scaling fo...
 
Intelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest IstanbulIntelligent Projects with Maven - DevFest Istanbul
Intelligent Projects with Maven - DevFest Istanbul
 
Introduction to Agile Software Development Process
Introduction to Agile Software Development ProcessIntroduction to Agile Software Development Process
Introduction to Agile Software Development Process
 
O365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - MaterialO365 Developer Bootcamp NJ 2018 - Material
O365 Developer Bootcamp NJ 2018 - Material
 
Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)Cs 1023 lec 8 design pattern (week 2)
Cs 1023 lec 8 design pattern (week 2)
 

More from Jeff Potts

No Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with AnsibleNo Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with Ansible
Jeff Potts
 
Moving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to MicroservicesMoving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to Microservices
Jeff Potts
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
Jeff Potts
 
Could Alfresco Survive a Zombie Attack?
Could Alfresco Survive a Zombie Attack?Could Alfresco Survive a Zombie Attack?
Could Alfresco Survive a Zombie Attack?
Jeff Potts
 
Connecting Content Management Apps with CMIS
Connecting Content Management Apps with CMISConnecting Content Management Apps with CMIS
Connecting Content Management Apps with CMIS
Jeff Potts
 
The Challenges of Keeping Bees
The Challenges of Keeping BeesThe Challenges of Keeping Bees
The Challenges of Keeping Bees
Jeff Potts
 
Getting Started With CMIS
Getting Started With CMISGetting Started With CMIS
Getting Started With CMIS
Jeff Potts
 
Alfresco: What every developer should know
Alfresco: What every developer should knowAlfresco: What every developer should know
Alfresco: What every developer should know
Jeff Potts
 
CMIS: An Open API for Managing Content
CMIS: An Open API for Managing ContentCMIS: An Open API for Managing Content
CMIS: An Open API for Managing Content
Jeff Potts
 
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
Jeff Potts
 
Alfresco: The Story of How Open Source Disrupted the ECM Market
Alfresco: The Story of How Open Source Disrupted the ECM MarketAlfresco: The Story of How Open Source Disrupted the ECM Market
Alfresco: The Story of How Open Source Disrupted the ECM Market
Jeff Potts
 
Join the Alfresco community
Join the Alfresco communityJoin the Alfresco community
Join the Alfresco community
Jeff Potts
 
Intro to the Alfresco Public API
Intro to the Alfresco Public APIIntro to the Alfresco Public API
Intro to the Alfresco Public API
Jeff Potts
 
Apache Chemistry in Action
Apache Chemistry in ActionApache Chemistry in Action
Apache Chemistry in Action
Jeff Potts
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Jeff Potts
 
Alfresco Community Survey 2012 Results
Alfresco Community Survey 2012 ResultsAlfresco Community Survey 2012 Results
Alfresco Community Survey 2012 Results
Jeff Potts
 
Getting Started with CMIS
Getting Started with CMISGetting Started with CMIS
Getting Started with CMIS
Jeff Potts
 
Relational Won't Cut It: Architecting Content Centric Apps
Relational Won't Cut It: Architecting Content Centric AppsRelational Won't Cut It: Architecting Content Centric Apps
Relational Won't Cut It: Architecting Content Centric Apps
Jeff Potts
 
Alfresco SAUG: State of ECM
Alfresco SAUG: State of ECMAlfresco SAUG: State of ECM
Alfresco SAUG: State of ECM
Jeff Potts
 
Alfresco SAUG: CMIS & Integrations
Alfresco SAUG: CMIS & IntegrationsAlfresco SAUG: CMIS & Integrations
Alfresco SAUG: CMIS & Integrations
Jeff Potts
 

More from Jeff Potts (20)

No Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with AnsibleNo Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with Ansible
 
Moving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to MicroservicesMoving From Actions & Behaviors to Microservices
Moving From Actions & Behaviors to Microservices
 
Moving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco RepositoryMoving Gigantic Files Into and Out of the Alfresco Repository
Moving Gigantic Files Into and Out of the Alfresco Repository
 
Could Alfresco Survive a Zombie Attack?
Could Alfresco Survive a Zombie Attack?Could Alfresco Survive a Zombie Attack?
Could Alfresco Survive a Zombie Attack?
 
Connecting Content Management Apps with CMIS
Connecting Content Management Apps with CMISConnecting Content Management Apps with CMIS
Connecting Content Management Apps with CMIS
 
The Challenges of Keeping Bees
The Challenges of Keeping BeesThe Challenges of Keeping Bees
The Challenges of Keeping Bees
 
Getting Started With CMIS
Getting Started With CMISGetting Started With CMIS
Getting Started With CMIS
 
Alfresco: What every developer should know
Alfresco: What every developer should knowAlfresco: What every developer should know
Alfresco: What every developer should know
 
CMIS: An Open API for Managing Content
CMIS: An Open API for Managing ContentCMIS: An Open API for Managing Content
CMIS: An Open API for Managing Content
 
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
Apache Chemistry in Action: Using CMIS and your favorite language to unlock c...
 
Alfresco: The Story of How Open Source Disrupted the ECM Market
Alfresco: The Story of How Open Source Disrupted the ECM MarketAlfresco: The Story of How Open Source Disrupted the ECM Market
Alfresco: The Story of How Open Source Disrupted the ECM Market
 
Join the Alfresco community
Join the Alfresco communityJoin the Alfresco community
Join the Alfresco community
 
Intro to the Alfresco Public API
Intro to the Alfresco Public APIIntro to the Alfresco Public API
Intro to the Alfresco Public API
 
Apache Chemistry in Action
Apache Chemistry in ActionApache Chemistry in Action
Apache Chemistry in Action
 
Building Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco APIBuilding Content-Rich Java Apps in the Cloud with the Alfresco API
Building Content-Rich Java Apps in the Cloud with the Alfresco API
 
Alfresco Community Survey 2012 Results
Alfresco Community Survey 2012 ResultsAlfresco Community Survey 2012 Results
Alfresco Community Survey 2012 Results
 
Getting Started with CMIS
Getting Started with CMISGetting Started with CMIS
Getting Started with CMIS
 
Relational Won't Cut It: Architecting Content Centric Apps
Relational Won't Cut It: Architecting Content Centric AppsRelational Won't Cut It: Architecting Content Centric Apps
Relational Won't Cut It: Architecting Content Centric Apps
 
Alfresco SAUG: State of ECM
Alfresco SAUG: State of ECMAlfresco SAUG: State of ECM
Alfresco SAUG: State of ECM
 
Alfresco SAUG: CMIS & Integrations
Alfresco SAUG: CMIS & IntegrationsAlfresco SAUG: CMIS & Integrations
Alfresco SAUG: CMIS & Integrations
 

Recently uploaded

WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
ArgaBisma
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
Mark Billinghurst
 
Best Programming Language for Civil Engineers
Best Programming Language for Civil EngineersBest Programming Language for Civil Engineers
Best Programming Language for Civil Engineers
Awais Yaseen
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
Toru Tamaki
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Bert Blevins
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
ishalveerrandhawa1
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
Neo4j
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
Eric D. Schabell
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
Vijayananda Mohire
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
Aurora Consulting
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
Stephanie Beckett
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
Adam Dunkels
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
Matthew Sinclair
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
Stephanie Beckett
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
welrejdoall
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
Emerging Tech
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
Larry Smarr
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
Liveplex
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
SynapseIndia
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
UiPathCommunity
 

Recently uploaded (20)

WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdfWhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
WhatsApp Image 2024-03-27 at 08.19.52_bfd93109.pdf
 
Research Directions for Cross Reality Interfaces
Research Directions for Cross Reality InterfacesResearch Directions for Cross Reality Interfaces
Research Directions for Cross Reality Interfaces
 
Best Programming Language for Civil Engineers
Best Programming Language for Civil EngineersBest Programming Language for Civil Engineers
Best Programming Language for Civil Engineers
 
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
論文紹介:A Systematic Survey of Prompt Engineering on Vision-Language Foundation ...
 
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly DetectionAdvanced Techniques for Cyber Security Analysis and Anomaly Detection
Advanced Techniques for Cyber Security Analysis and Anomaly Detection
 
Calgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptxCalgary MuleSoft Meetup APM and IDP .pptx
Calgary MuleSoft Meetup APM and IDP .pptx
 
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdfBT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
BT & Neo4j: Knowledge Graphs for Critical Enterprise Systems.pptx.pdf
 
Observability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetryObservability For You and Me with OpenTelemetry
Observability For You and Me with OpenTelemetry
 
Quantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLMQuantum Communications Q&A with Gemini LLM
Quantum Communications Q&A with Gemini LLM
 
Quality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of TimeQuality Patents: Patents That Stand the Test of Time
Quality Patents: Patents That Stand the Test of Time
 
What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024What’s New in Teams Calling, Meetings and Devices May 2024
What’s New in Teams Calling, Meetings and Devices May 2024
 
How to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptxHow to Build a Profitable IoT Product.pptx
How to Build a Profitable IoT Product.pptx
 
20240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 202420240702 QFM021 Machine Intelligence Reading List June 2024
20240702 QFM021 Machine Intelligence Reading List June 2024
 
What's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptxWhat's New in Copilot for Microsoft365 May 2024.pptx
What's New in Copilot for Microsoft365 May 2024.pptx
 
Manual | Product | Research Presentation
Manual | Product | Research PresentationManual | Product | Research Presentation
Manual | Product | Research Presentation
 
Implementations of Fused Deposition Modeling in real world
Implementations of Fused Deposition Modeling  in real worldImplementations of Fused Deposition Modeling  in real world
Implementations of Fused Deposition Modeling in real world
 
The Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU CampusesThe Increasing Use of the National Research Platform by the CSU Campuses
The Increasing Use of the National Research Platform by the CSU Campuses
 
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALLBLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
BLOCKCHAIN FOR DUMMIES: GUIDEBOOK FOR ALL
 
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptxRPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
RPA In Healthcare Benefits, Use Case, Trend And Challenges 2024.pptx
 
UiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs ConferenceUiPath Community Day Kraków: Devs4Devs Conference
UiPath Community Day Kraków: Devs4Devs Conference
 

Flexible Permissions Management with ACL Templates

  • 1. Flexible & Repeatable Permissions Management with ACL Templates Jeff Potts
  • 2. Learn. Connect. Collaborate. Alfresco is missing a feature: ACL Templates • Many projects start with a spreadsheet that organizes folder structure • The next step is often defining the permissions that go with that structure • Usually, permissions are applied in a consistent, predictable way according to business rules
  • 3. Learn. Connect. Collaborate. Don’t Repeat Yourself • When you programmatically create nodes and set permissions, it is tempting to just make a bunch of API calls and be done • What happens when you need to set permissions in different places? – JavaScript versus Java – Actions versus Behaviors – Workflows – Yes, you can centralize this logic in a common “service” class, but…
  • 4. Learn. Connect. Collaborate. If it might change, why is it in code? • What happens when the business rules change and a power user wants to change how permissions are set? • Build and deploy just because an entry in an ACL is changing from “Collaborator” to “Consumer”? • Yuck
  • 5. Learn. Connect. Collaborate. How Does Everyone Else Do It? • Many ECM systems allow permission sets to be declared, then applied when needed • Now you can do that with Alfresco • I give you Alfresco ACL Templates! – https://github.com/conexiam/alfresco-acl-templates • Dun dun DUN!!! 1
  • 6. Learn. Connect. Collaborate. Example: Folders that hold files related to client projects • /Project 1 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 2 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 3 for Client B – /Design Discussion – /Final Deliverables – /Status Reports Project 1 Team: Collaborator Client A Team: Collaborator Project 2 Team: Collaborator Client A Team: Consumer Project 1 Team: Collaborator Client A Team: Consumer Project 2 Team: Collaborator Client A Team: Collaborator Project 3 Team: Collaborator Client B Team: Consumer Project 3 Team: Collaborator Client B Team: Collaborator
  • 7. Learn. Connect. Collaborate. I see a pattern! • /Project 1 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 2 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 3 for Client B – /Design Discussion – /Final Deliverables – /Status Reports Project 1 Team: Collaborator Client A Team: Collaborator Project 2 Team: Collaborator Client A Team: Consumer Project 1 Team: Collaborator Client A Team: Consumer Project 2 Team: Collaborator Client A Team: Collaborator Project 3 Team: Collaborator Client B Team: Consumer Project 3 Team: Collaborator Client B Team: Collaborator There is a group for a project that is always the collaborator. There is a group for the client that is a Collaborator on some folders and a Consumer on other folders. That’s potentially two “templates”
  • 8. Learn. Connect. Collaborate. A Wrinkle: Group can’t be determined at design-time • /Project 1 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 2 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 3 for Client B – /Design Discussion – /Final Deliverables – /Status Reports Project 1 Team: Collaborator Client A Team: Collaborator Project 2 Team: Collaborator Client A Team: Consumer Project 1 Team: Collaborator Client A Team: Consumer Project 2 Team: Collaborator Client A Team: Collaborator Project 3 Team: Collaborator Client B Team: Consumer Project 3 Team: Collaborator Client B Team: Collaborator Uh-oh, variability!
  • 9. Learn. Connect. Collaborate. Another Wrinkle: Time 2 • /Project 1 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 2 for Client A – /Design Discussion – /Final Deliverables – /Status Reports • /Project 3 for Client B – /Design Discussion – /Final Deliverables – /Status Reports Project 1 Team: Collaborator Client A Team: Collaborator Project 2 Team: Collaborator Client A Team: Consumer Project 1 Team: Collaborator Client A Team: Consumer Project 2 Team: Collaborator Client A Team: Collaborator Project 3 Team: Collaborator Client B Team: Consumer Project 3 Team: Collaborator Client B Team: Collaborator Project 1 Team: Consumer Client A Team: Consumer Project 2 Team: Consumer Client A Team: Consumer Project 1 Team: Consumer Client A Team: Consumer Project 2 Team: Consumer Client A Team: Consumer Project 3 Team: Consumer Client B Team: Consumer Project 3 Team: Consumer Client B Team: Consumer Active Projects Completed Projects
  • 10. Learn. Connect. Collaborate. Alfresco ACL Templates Add-On • Open source project sponsored by a client called Conexiam – I maintain it on their behalf at Github • Allows you to declare ACL templates as JSON – ACL Templates live in the Data Dictionary • Provides an “ACL Template Service” that you can call from JavaScript or Java to “apply” a template to a node
  • 11. Learn. Connect. Collaborate. Example #1: Static ACL Template { "inherit": false, "permissions": [ { "authority": ”GROUP_Project 1 Team", "permission": "Collaborator” }, { "authority": ”GROUP_Client A Team", "permission": "Collaborator” } ] }
  • 12. Learn. Connect. Collaborate. Example #2: Applying an ACL Template import com.conexiam.acl.templates.service.AclTemplateService; …SNIP… AclTemplateService aclTemplateService; …SNIP… aclTemplateService.apply("test-template-2.json", testFolder);
  • 13. Learn. Connect. Collaborate. Example #3: An ACL template with placeholders 3 { "inherit": false, "permissions": [ { "authorityTemplate": ”project-team", "permission": "Collaborator” }, { "authorityTemplate": ”client-team", "permission": "Collaborator” } ] }
  • 14. Learn. Connect. Collaborate. How do those placeholders work? • Can specify an authorityTemplate instead of a hard-coded authority • An authorityTemplate is just a Spring Bean that resolves an authority template to an actual authority • Examples: – What is the correct “project group” for this site? – What is the correct “client group” for this site? – Basically anything that can use the nodeRef to resolve the template
  • 15. Learn. Connect. Collaborate. Add-on ships with one sample authority template resolver • Site role group resolver • Returns the site group for a given role • Example: Always give the Site Collaborator group for this site Consumer access • Making your own authority template resolvers is easy
  • 16. Learn. Connect. Collaborate. Implementing your own authority resolver • Create a Java class that implements AuthorityResolver • Inject your dependencies • Implement public String resolve(NodeRef nodeRef) • Config in Spring context XML • Add to authorityResolvers map
  • 17. Learn. Connect. Collaborate. Example: Site Role Group Authority Resolver 4 <bean id="authority-template.site-manager-group” class="com.conexiam.acl.templates.authority.resolvers.SiteRole GroupResolver"> <property name="siteService"> <ref bean="SiteService" /> </property> <property name="role" value="SiteManager" /> </bean>
  • 18. Learn. Connect. Collaborate. Example: Site Role Group Authority Resolver public String resolve(NodeRef nodeRef) { SiteInfo siteInfo = siteService.getSite(nodeRef); if (siteInfo == null) { return null; } String siteId = siteInfo.getShortName(); String siteRoleGroup = siteService.getSiteRoleGroup(siteId, role); return siteRoleGroup; }
  • 19. Learn. Connect. Collaborate. Summary • ACL Templates Add-on • Declare permissions in JSON, store in Data Dictionary • Apply permissions using ACL Template Service • Removes permission logic from code • Makes it easier for non-technical people to change the permissions your code sets on nodes it creates
  • 20. Learn. Connect. Collaborate. Summary • ACL Templates can have hard-coded authorities, authority templates, or a mix of both • Authority templates are resolved with the help of an authority template resolver class – Can use properties on the node, or other services to help determine the right authority
  • 21. Learn. Connect. Collaborate. Support the Community! • This add-on was funded by a Metaversant client called Conexiam • Per their request, we did all of their Alfresco customizations in the open • Check out the other related repositories at https://github.com/Conexiam • Let me know if you have any questions! • @jeffpotts01
  • 22. Flexible & Repeatable Permissions Management with ACL Templates Thank you! @jeffpotts01