Download presentation
Presentation is loading. Please wait.
Published byJeffry Chase Modified over 9 years ago
1
Configuring Fluid Topics FT 103 26.08.2014 Copyright © Antidot 2014
2
2 Configuring Fluid Topics ■ Portal behavior ■ Authentication and Users management ■ Look & Feel ■ Facets & Metas ■ Data Processing ■ REST API Copyright © Antidot 2014
3
3 Configuring Fluid Topics ■ Set of configuration files (json, css, etc.) ■conf.json ■custom.less ■mongo.conf.json ■vhost.conf.json ■ws.conf.json ■header.vm ■… Copyright © Antidot 2014
4
4 Configuring Fluid Topics ■ Json files ■Can be accessed / edited remotely ■Should be source controlled ■Documentation embedded ■ /configuration-doc Copyright © Antidot 2014
5
5 Configuring Fluid Topics ■ Files stored on the FT server: /usr/local/afs7/FluidTopics/conf/ / / Copyright © Antidot 2014
6
6 Configuring Fluid Topics ■ For a given status tenant, files will be read and merged if they exist in the following order: ■conf/-/conf.json ■conf/ /-/conf.json ■conf/ / /conf.json ■ Special folders (-): factorize resources shared by all tenants or statuses Copyright © Antidot 2014
7
7 Portal behavior Configuring Fluid Topics Copyright © Antidot 2014
8
8 Portal behavior ■ Enable/disable UI languages (EN, FR, DE, JA) ■ Enable / disable Open Search ■ Enable / disable Crawl support Copyright © Antidot 2015 conf.json
9
9 Portal behavior ■ Feedbacks ■One or several email adresses ■Advanced Integration with ticketing system Copyright © Antidot 2015 conf.json
10
10 Authentication & Users management Configuring Fluid Topics Copyright © Antidot 2014
11
11 Authentication & User management ■ User groups retrieval mechanism ■ User roles retrieval mechanism ■ Authentication realms ■ SSO configuration ■ Authentication policy Copyright © Antidot 2014
12
12 Users management Configuring Fluid Topics Copyright © Antidot 2014
13
13 User Groups ■ Allow to restrict access to a given content ■ User can access to content with groups he belongs to ■User groups are retrieved when user logs in ■Content groups are set at processing time by using the Control File. Copyright © Antidot 2014
14
14 User Roles ■ Fluid Topics has a role-based permission system. ■ A role represents a set of permissions. ■ Allow to restrict access to FT functionalities ■ Retrieved when user logs in Copyright © Antidot 2014
15
15 User Groups & Roles ■ Several way to set the roles and groups of a given user: ■From SSO mechanism ■Manually in the conf.json ■Static realm ■defaultUserRoles property ■Script ■ft_set_user_roles ■ft_set_user_groups (requires antidot-fluidtopics-tools package) ■API (requires ADMIN role to be used) Copyright © Antidot 2014
16
16 User Roles ■ List of roles ■ADMIN ■KHUB_ADMIN ■PERSONAL_BOOK_USER ■HTML_EXPORT_USER ■PDF_EXPORT_USER Copyright © Antidot 2014
17
17 User Groups & Roles – Examples Copyright © Antidot 2014 USER1USER2USER3 ROLES KHUB_ADMIN PBK_USER PDF_USER PBK_USER GROUPS tech_writer, partner, external partner, externalexternal Content access all2/31/3 Functionnalities access PBK ✓✓✗ PDF export ✓✗✗ LegacyPublications mapping ✓✗✗
18
18 Authentication Configuring Fluid Topics Copyright © Antidot 2014
19
19 Authentication Realms ■ Local register ■ Static ■ Against distant LDAP or AD ■ Single Sign On (SSO) Copyright © Antidot 2014
20
20 Authentication Realms ■ Local register Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "internal", "type": "internal" } ] } "authentication": { "realms": [ { "name": "internal", "type": "internal" } ] } FT Database
21
21 Authentication Realms ■ Static Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "static", "type": "static", "configuration": { "mail": "static-account@fluidtopics.com", "password": "aXHBEChodHJgUflUhziht7yDjCse", "name": "Static Account Username", "groups": "group1|group2", "roles": "KHUB_ADMIN|ADMIN|PERSONAL_BOOK_USER" } ] } "authentication": { "realms": [ { "name": "static", "type": "static", "configuration": { "mail": "static-account@fluidtopics.com", "password": "aXHBEChodHJgUflUhziht7yDjCse", "name": "Static Account Username", "groups": "group1|group2", "roles": "KHUB_ADMIN|ADMIN|PERSONAL_BOOK_USER" } ] }
22
22 Authentication Realms ■ LDAP Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "ldap", "type": "ldap", "configuration": { "url": "ldaps://ldap.host.com:63", "systemUser": "cn=reader,dc=antidot,dc=net", "systemPassword": ”password", "searchBase": "dc=antidot,dc=net", "loginAttribute": "mail", "nameAttribute": "cn", "mailAttribute": "mail", "authenticationMechanism": "simple" } ] } "authentication": { "realms": [ { "name": "ldap", "type": "ldap", "configuration": { "url": "ldaps://ldap.host.com:63", "systemUser": "cn=reader,dc=antidot,dc=net", "systemPassword": ”password", "searchBase": "dc=antidot,dc=net", "loginAttribute": "mail", "nameAttribute": "cn", "mailAttribute": "mail", "authenticationMechanism": "simple" } ] } LDAP
23
23 Authentication Realms ■ SSO ■Principle Copyright © Antidot 2014 id name mail [group, role] …
24
24 Authentication Realms ■ SSO ■O-Auth 1 Copyright © Antidot 2014 "realms": [ { "name": "foobar", "type": "oauth1", "configuration": { "key": "123456789a123456789b123456789c123456789d123456789e123456789f1234", "secret": "82a1234b5678cd911121314e1516f17181920fg21324354hi65768798jklm98765" "label": "Foobar Authentication Service", "requestTokenUrl": "https://foobar.com/oauthv1/get_request_token", "requestTokenVerb": "GET", "accessTokenUrl": "https://foobar.com/oauthv1/get_access_token", "accessTokenVerb": "GET", "authorizationUrl": "https://foobar.com/oauthv1/login?oauth_tk=${token}", "profileUrl": "https://foobar.com/oauthv1/get_user", "idReaderFunction": "read_user_id", "nameReaderFunction": "read_user_name" } "realms": [ { "name": "foobar", "type": "oauth1", "configuration": { "key": "123456789a123456789b123456789c123456789d123456789e123456789f1234", "secret": "82a1234b5678cd911121314e1516f17181920fg21324354hi65768798jklm98765" "label": "Foobar Authentication Service", "requestTokenUrl": "https://foobar.com/oauthv1/get_request_token", "requestTokenVerb": "GET", "accessTokenUrl": "https://foobar.com/oauthv1/get_access_token", "accessTokenVerb": "GET", "authorizationUrl": "https://foobar.com/oauthv1/login?oauth_tk=${token}", "profileUrl": "https://foobar.com/oauthv1/get_user", "idReaderFunction": "read_user_id", "nameReaderFunction": "read_user_name" }
25
25 Authentication Realms ■ SSO ■O-Auth 2, only for: ■Google ■Twitter ■Facebook Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "google", "type": "google", "configuration": { "key": "12345-abc123de.apps.googleusercontent.com", "secret": "53cR3t_K3Y" } ] } "authentication": { "realms": [ { "name": "twitter", "type": "twitter", "configuration": { "key": "mYTw1tt3RK3y", "secret": ”tw&TT3Rs3cr3t" } ] } "authentication": { "realms": [ { "name": "facebook", "type": "facebook", "configuration": { "key": ”10987654321", "secret": ”987cba654fde321" } ] }
26
26 Authentication Realms ■ SSO ■SAML Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "name_example", "type": "saml2", "configuration": { "name": "name_example", "keystoreFile": "saml/keystore.jks", "keystorePassword": " ", "privateKeyPassword": " ", "entityId": " ", "maxAuthenticationLifetime": 28800, "idpMetadataFile": "saml/saml-idp.xml", "nameReaderFunction": "read_user_name" } ] } "authentication": { "realms": [ { "name": "name_example", "type": "saml2", "configuration": { "name": "name_example", "keystoreFile": "saml/keystore.jks", "keystorePassword": " ", "privateKeyPassword": " ", "entityId": " ", "maxAuthenticationLifetime": 28800, "idpMetadataFile": "saml/saml-idp.xml", "nameReaderFunction": "read_user_name" } ] } "authentication": { "realms": [ { "name": "name_example", "type": "saml2", "configuration": { "name": "name_example", "keystoreFile": "saml/keystore.jks", "keystorePassword": " ", "privateKeyPassword": " ", "entityId": " ", "maxAuthenticationLifetime": 28800, "idpMetadataFile": "saml/saml-idp.xml", "nameReaderFunction": "read_user_name" } ] }
27
27 Authentication Realms ■ authentication.js ■ SAML message sample Copyright © Antidot 2015 function read_user_name(name_id, attributes) { return attributes['givenName'][0] + ' ' + attributes['sn'][0]; } name_id: _5994dac0357573cf68000559eb1e1f4d376488459b attributes: { mail=[foobar-0216@yopmail.com], … urn:oid:0.9.2342.19200300.100.1.1=[foobar], givenName=[Foo], urn:oid:2.5.4.42=[Foo], … sn=[Bar], urn:oid:2.5.4.4=[Jupp], … }
28
28 Authentication Realms ■ Realms are not exclusive ■ Multi back-end authentication Copyright © Antidot 2014 "authentication": { "realms": [ { "name": "internal", "type": "internal" }, { "name": "google", "type": "google", "configuration": { "key": "12345-abc123de.apps.googleusercontent.com", "secret": "53cR3t_K3Y" } }, { "name": "twitter", "type": "twitter", "configuration": { "key": "mYTw1tt3RK3y", "secret": ”tw&TT3Rs3cr3t" } }, { "name": "facebook", "type": "facebook", "configuration": { "key": ”10987654321", "secret": ”987cba654fde321" }...
29
29 Authentication Realms ■ SSO – must know ■FT need some information about user ■Id (autogenerated) ■Name ■Mail ■Role ■Group ■SSO id (Oauth-id, SAML id) ■These informations must be retrieved from the user profile within the SSO response (strongly depends on SSO type) Copyright © Antidot 2014
30
30 Authentication Realms ■ SSO – must know ■Missing profile’s informations are asked when trying to login ■Log in: a cookie (sessionId) is initialized for 30min ■sessionId renewed after each query to FT ■Log out: sessionId is deleted ■When a user account is removed, users’ resources (pbk, bookmarks, …) are deleted Copyright © Antidot 2014
31
31 Authentication Policy ■ Password rules ■LOW ■6 char. Min ■HIGH ■8 char.min +at least 3 of the 4 characters –lowercase letter, uppercase lette, number, non alphanumeric Copyright © Antidot 2014 "authentication": { "realms": [ /* [..] */ }, "passwordPolicy": { "level": ”LOW" }
32
32 Authentication Policy Copyright © Antidot 2014 "authentication": { "realms": [ /* [..] */ }, "registration": { "type": "PUBLIC" } ■ Registration types ■PUBLIC ■VERIFIED (default) ■CLOSED
33
33 Authentication Policy ■ Force login Copyright © Antidot 2014
34
34 Look and feel Configuring Fluid Topics Copyright © Antidot 2014
35
35 Look and feel ■ Rebranding ■Logo ■Colors ■Fonts ■Languages ■Emails ■Title ■Tagline ■Vanity URL Copyright © Antidot 2015
36
36 Look and feel ■ Rebranding ■Logo ■Colors ■Fonts ■Languages ■Emails ■Title ■Tagline ■Vanity URL Copyright © Antidot 2015
37
37 Look and feel ■ Managed by both conf.json and custom css files ■ Customization can be applied on the three portal pages: ■Home ■Search ■Reader ■ In following slides, changes show in: ■Green can be made simply by overriding css classes ■Red made by tweaking environment variables on the server side Copyright © Antidot 2014
38
38 Look and feel – Customize Home Copyright © Antidot 2015
39
39 Look and feel – Customize Home Copyright © Antidot 2015 favicon color color, font, size custom main logo portal title and description color, font, size IN BACK OFFICE: Several slides with custom images, text and link
40
40 Look and feel – Customize Search Copyright © Antidot 2015
41
41 Look and feel – Customize Search Copyright © Antidot 2015 colors header logo color Title, abstract and breadcrumbs : color, font type and font size
42
42 Look and feel – Customize Reader Copyright © Antidot 2015
43
43 Look and feel – Customize Reader Copyright © Antidot 2015 colors, font type/size Content Styles: Titles, content, tables, lists, monospace, codeblock, emphasis, … Everything is customizable based on standard DITA styles, custom output-class attribute custom icons color custom icons custom header logo
44
44 Look and feel – Customize Reader ■ Any DITA tag (standards and specialized ones) can be customized ■Exemple: add « Steps to do: » before the list of steps in a Task. ■ output-class attribute can be used to apply custom styles to any part of content Copyright © Antidot 2015
45
45 Look and feel – Rebranding ■ conf.json Copyright © Antidot 2015 ■ custom.less (css) { "ui": { "languages": [ "en", "fr" ], "mainTitle": { "en": "Antidot Training" }, "subTitle": { "en": "Learning Antidot products" }, "homePageMainLogo": "ATS.png", "headerLogo": "ATS_header.png", "mailHeaderLogo": "ATS.png", "favicon": "antidot32.png", "supportMail": "support@antidot.net", "feedbackMails": [ "formation@antidot.net" ], … @color1: #852a79; @color2: #60afbf; @color3: #f3efe7; @color4: #ffbb1a; @color5: #5a5a64; @font1: Garamond, Helvetica, Arial, sans-serif; @font2: Courier, Helvetica, Arial, sans-serif;
46
46 Look and feel – Rebranding ■ conf.json Copyright © Antidot 2015 ■ custom.less (css) { "ui": { "languages": [ "en", "fr" ], "mainTitle": { "en": "Antidot Training" }, "subTitle": { "en": "Learning Antidot products" }, "homePageMainLogo": "ATS.png", "headerLogo": "ATS_header.png", "mailHeaderLogo": "ATS.png", "favicon": "antidot32.png", "supportMail": "support@antidot.net", "feedbackMails": [ "formation@antidot.net" ], … @color1: #852a79; @color2: #60afbf; @color3: #f3efe7; @color4: #ffbb1a; @color5: #5a5a64; @font1: Garamond, Helvetica, Arial, sans-serif; @font2: Courier, Helvetica, Arial, sans-serif;
47
47 Look and feel – Add a custom header Copyright © Antidot 2015
48
48 Look and feel – Add a custom header ■ Added in the Fluid Topics portal by: ■putting a header.vm template file in the appropriate configuration directory and ■entering the dimensions of the header in the custom.less file. Copyright © Antidot 2015
49
49 Look and feel – Add a custom header ■ header.vm Copyright © Antidot 2015 #if ($isAuthenticated) Welcome $user.displayName ! Your email is $user.emailAddress. #foreach( $key in $user.authenticationIdentifiers.keySet() ) Your $key id is $user.authenticationIdentifiers[$key]. #end #else You are not authenticated. #end #if ($isAuthenticated) Welcome $user.displayName ! Your email is $user.emailAddress. #foreach( $key in $user.authenticationIdentifiers.keySet() ) Your $key id is $user.authenticationIdentifiers[$key]. #end #else You are not authenticated. #end
50
50 Look and feel – Add a custom header ■ custom.less Copyright © Antidot 2015 … @tenantCustomHeaderHeight: 100px; … @tenantCustomHeaderHeight: 100px; …
51
51 Look and feel – PDF Templates Customization ■ The PBK to PDF feature uses the pdf-template.vm default template file located in: /usr/local/afs7/Fluid-Topics/conf/ / /pdf_templates/default/ Copyright © Antidot 2015
52
52 Look and feel – PDF Templates Customization ■ The pdf-template.vm file is auto-documented ■ It can be customized by using CSS parameters. ■ A full example can be found from the official Antidot documentation portal ■https://doc.antidot.nethttps://doc.antidot.net Copyright © Antidot 2015
53
53 Look and feel – PDF Templates Customization ■ pdf-template.vm placeholders: ■$author-display-name ■$author-email ■$description ■$formatted-date ■$formatted-time ■$outline ■$pbk-title ■$tenant-title ■$topics Copyright © Antidot 2015
54
54 Facets and metas Configuring Fluid Topics Copyright © Antidot 2014
55
55 Facets ■ Facets are automatically created: ■from DITA metadata tags in case of Dita content ■from facet infos of Control Files in case of UD ■ Every Standard DITA prolog - topicmeta - bookmeta tags generates a Facet Copyright © Antidot 2014
56
56 Facets Core Network ATS9900 VOBB IMS Copyright © Antidot 2014
57
57 Facets ■ Facets display and behavior is driven by conf.json ■ Modifications are taken on-the-fly ■ What can be changed? ■Display (Home and Search pages) ■Order ■Title ■Type Copyright © Antidot 2015
58
58 Facets – Display ■ By default: ■No facets visible on Search pages ■No facet visible on Home page ■Home page displayed facets is a subset of Search pages ■ Available parameters: ■home: facets displayed on Home page ■componentsBasedContents: facets displayed on Search page Copyright © Antidot 2015
59
59 Facets & Metas – Title ■ Is the same on Home and Search pages ■ Can be defined for each UI language Copyright © Antidot 2015
60
60 Facets – Order ■ Can be different between Home and Search pages ■ Declare facets to display in desired order Copyright © Antidot 2015
61
61 Facets – Type ■ Is the same on Home and Search pages ■ Always OR by default ■ Can be set to AND, OR (default) and MONOVALUED. Copyright © Antidot 2015
62
62 Metas ■ Book and/or topics properties to display Copyright © Antidot 2014
63
63 Metas – Display & Order ■ By default: ■No metas visible on Search page ■No metas visible on Reader page ■ Available parameters: ■metadata: metas displayed (and ordered) on both Search and Reader pages Copyright © Antidot 2015
64
64 Facets – Examples ■ Change Publication and Training titles and Training types ■ Restrict on Home page ■ Change Search page order Copyright © Antidot 2015 "facets": { "descriptors": [ { "id": "publication_title", "label": { "en": "Publication Title", "fr": "Titre de la publication" } }, { "id": "version", "label": { "en": "Version", "fr": "Version" } }, { "id": "my_training_facet", "type": "AND", "label": { "en": "Training", "fr": "Formation" } ], "home": [ "version", "publication_title" ], "componentBasedContents": [ "publication_title", "my_training_facet" "version" ] }
65
65 Facets – Examples Copyright © Antidot 2015
66
66 Metas – Examples ■ Change Product and Training meta title ■ Change Search page order ■ Restrict on Reader page Copyright © Antidot 2015 "metadata": { "descriptors": [ { "id": "prodname", "label": { "en": "Product", "fr": "Produit" } }, { "id": "my_training_meta", "label": { "en": "Training metadata", "fr": "Metadonnée formation" } ], "componentBasedContents": [ "prodname", "my_training_meta" ], "book": [ "prodname", "my_training_meta" ] },
67
67 Metas – Examples Copyright © Antidot 2015
68
68 Data processing Configuring Fluid Topics Copyright © Antidot 2014
69
69 Data processing ■ What can be done? ■Enable / Disable Related Links ■Ditamaps to process ■Ditavals to apply ■Layered access to the content Copyright © Antidot 2014
70
70 Data processing ■ Available parameters ■related_links ■ditamaps ■allowed_ditavals_for_ditamaps ■privateDitavals Copyright © Antidot 2015
71
71 Data processing ■ related_links Copyright © Antidot 2015
72
72 ■ Users vs. ditaval mapping ■ conf.json Data processing – Rights "privateDitavals":{ "Steele Accounting User Guide":"asteele", "Grey Accounting User Guide":"cgrey" }, "ditamaps":[ "ditamaps/my_ditamap1.ditamap", "ditamaps/my_ditamap2.ditamap" ], "allowed_ditavals_for_ditamaps":{ "DITA/my_ditamap.ditamap":[ "DITA/ditavals/cre_test_pdf.ditaval" ] }
73
73 ■ Users vs. ditaval mapping ■ conf.json Data processing – Rights "privateDitavals":{ "Steele Accounting User Guide":"asteele", "Grey Accounting User Guide":"cgrey" }, "ditamaps":[ "ditamaps/my_ditamap1.ditamap", "ditamaps/my_ditamap2.ditamap" ], "allowed_ditavals_for_ditamaps":{ "DITA/my_ditamap.ditamap":[ "DITA/ditavals/cre_test_pdf.ditaval" ] }
74
74 REST API Configuring Fluid Topics Copyright © Antidot 2014
75
75 REST API ■ Fluid Topics exposes some of its features through web services. ■ JSON based REST web services. Copyright © Antidot 2014
76
76 REST API Copyright © Antidot 2015 WS-APIWS-API
77
77 REST API – Authentication ■ Some WS require authentication ■authentication can be done on-the-fly with username and password credentials ■based on Basic Access Authentication ■specific http header name: FT-Authorization. ■Example: FT-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== Copyright © Antidot 2015 Base64 encoding of Aladdin:open sesame
78
78 REST API ■ The structure of the Fluid Topics server REST API is organized according to the underlying components and data you can access ■…/api/khub/ dataflow/ users/ Copyright © Antidot 2015
79
79 REST API – Access Knowledge Hub ■ /api/khub/maps ■List the maps; access the content of a specific map. ■ /api/khub/${mapId}/topics ■List the topics; access the content of a specific topic. ■ /api/khub/documents ■List the unstructured documents; access the content of a specific document. ■ … Copyright © Antidot 2015
80
80 Examples – Listing maps ■ GET ■ /api/khub/maps Copyright © Antidot 2015 [ { id: "8e76cba30da252b528b3210944808e78", title: "AFS Configuration Guide", metadata: [ { key: "version", label: "Version", values: [ "7.8" ] }, { key: "prodname", label: "Produit", values: ["AIF"] }, { key: "Platform", label: "Plate-forme", values: ["Debian"] }, { key: "category", label: "Catégorie", values: [ "Reference Guide"] } ] }, …
81
81 Examples – Getting maps topics ■ GET ■ /api/khub/maps/${mapId}/topics Copyright © Antidot 2015 { "id": "mapId", "title": "Map Title", "topics": [ { "topic": { "topicId": "topic1", "title": "Topic 1 Title", "link": { "topicsUris": [ "topic1" ] } }, "children": [] }, … 1 1 { "topic": { "topicId": "topic2", "title": "Topic 2 Title", "link": { "topicsUris": [ "topic2", "topic2EmbeddedTopic1", "topic2EmbeddedTopic2" ] } }, "children": [ { "topic": { "topicId": "topic2Child1", "title": "Topic 2.1 Title", "link": { "topicsUris": [ "topic2Child1" ] } }, "children": [] } ] } ] } 2 2
82
82 Examples – Getting topics ■ GET ■ /api/khub/maps/${mapId}/topics/${topicId}/content Copyright © Antidot 2015 { "id": "topic1", "title": "Topic 1 Title", "text": "Content of topic1. It can contain some HTML code!" }
83
83 REST API – Building links to content ■ Cf. FT102: Managing Your Data with FT – « Dataflow – URIS » Copyright © Antidot 2015
84
84 REST API – Publications and processing reports ■ List of available publication reports ■ GET ■ /api/dataflows/${dataflow_name}/report/jobs[?since=${date}] Copyright © Antidot 2015 [{ "id": "jobId1", "date": "2015-04-26..." },{ "id": "jobId2", "date": "2015-04-27..." }]
85
85 REST API – Publications and processing reports ■ Getting content activity of a given report ■ GET ■ /api/dataflows/${dataflow_name}/report/ jobs/${jobId} Copyright © Antidot 2015 "id": "jobId1" "date": "2015-04-27...", "maps": [ { "uri": "map1-uri", "status": "DELETED", "topics": [ { "uri": "topic1-uri", "status": "DELETED" } ] }, { "uri": "map3-uri", "status": "UPDATED", "topics": [ { "uri": "topicx-uri", "status": ”CREATED" }, { "uri": "topicy-uri", "status": "CREATED" } ] } ] }
86
86 REST API – User management ■ Listing users ■GET ■…/api/users Copyright © Antidot 2015 [ { "id": "a43eb18a-3f48-4732-9389-61b540ce9d0d", "displayName": "A User", "emailAddress": "user@mail.com" }, { "id": "d5831ef1-b3a5-47ef-b6dd-168a7c65c973", "displayName": "Another User", "emailAddress": "another.user@gmail.com" } ]
87
87 REST API – User management ■ Getting/setting users groups ■GET ■/api/users/${id}/groups Copyright © Antidot 2015 { "id": "a43eb18a-3f48-4732-9389-61b540ce9d0d", "manualGroups": ["group1"], "authenticationGroups": ["group2","group3"] }
88
88 REST API – User management ■ Getting/setting users groups ■PUT ■/api/users/${id}/groups Copyright © Antidot 2015 { "manualGroups": ["group10", "group11"] } { "id": "a43eb18a-3f48-4732-9389-61b540ce9d0d", "manualGroups": ["group10", "group11"], "authenticationGroups": ["group2","group3"] }
89
89 REST API – User management ■ Getting/setting users roles ■GET ■/api/users/${id}/roles Copyright © Antidot 2015 { "id": "a43eb18a-3f48-4732-9389-61b540ce9d0d", "manualRoles": [], "authenticationRoles": ["ADMIN"] }
90
90 REST API – User management ■ Getting/setting users roles ■PUT ■/api/users/${id}/roles Copyright © Antidot 2015 { "manualRoles": ["KHUB_ADMIN","PERSONAL_BOOK_USER"] } { "id": "a43eb18a-3f48-4732-9389-61b540ce9d0d", "manualRoles": ["KHUB_ADMIN","PERSONAL_BOOK_USER"], "authenticationRoles": [], "defaultRoles": [] }
91
91 Questions Configuring Fluid Topics Copyright © Antidot 2014
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.