<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Resources - wizzdi</title>
	<atom:link href="https://wizzdi.com/resources/feed/" rel="self" type="application/rss+xml" />
	<link>https://wizzdi.com</link>
	<description>Wizzdi No Code</description>
	<lastBuildDate>Sat, 09 Nov 2024 10:05:55 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>

<image>
	<url>https://wizzdi.com/wp-content/uploads/2024/07/cropped-favicon-32x32.png</url>
	<title>Resources - wizzdi</title>
	<link>https://wizzdi.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Efficiency Gains in Backend Development Using Wizzdi Cloud</title>
		<link>https://wizzdi.com/docs/blog/efficiency-gains-in-backend-development-using-wizzdi-cloud/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Sat, 09 Nov 2024 10:05:55 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=4152</guid>

					<description><![CDATA[<p>Abstract This study explores the efficiency gains achievable when using the Wizzdi Cloud no-code platform compared to traditional backend development. Wizzdi Cloud uniquely combines the flexibility of standard development tools with the speed of no-code, promising to accelerate developer workflows significantly without imposing proprietary dependencies. Through a controlled experiment involving professional developers, the study demonstrates [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/blog/efficiency-gains-in-backend-development-using-wizzdi-cloud/">Efficiency Gains in Backend Development Using Wizzdi Cloud</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h3 id="Abstract" data-renderer-start-pos="1">Abstract</h3>
<p data-renderer-start-pos="11">This study explores the efficiency gains achievable when using the Wizzdi Cloud no-code platform compared to traditional backend development. Wizzdi Cloud uniquely combines the flexibility of standard development tools with the speed of no-code, promising to accelerate developer workflows significantly without imposing proprietary dependencies. Through a controlled experiment involving professional developers, the study demonstrates substantial time savings and an accessible learning curve, with completion times reduced up to 30 times compared to conventional development. Follow-up research will further investigate the impact of hybrid workflows (combining Wizzdi Cloud and traditional development) and evaluate Wizzdi Cloud&#8217;s performance on more complex projects involving additional aspects beyond domain modeling and CRUD operations.</p>
<hr role="presentation" />
<h3 id="Introduction" data-renderer-start-pos="858">Introduction</h3>
<p data-renderer-start-pos="872">While most no-code platforms offer efficiency improvements, Wizzdi Cloud stands out by seamlessly integrating with established development tools and providing dependency-free code. This unique approach enables backend developers to use Wizzdi Cloud as an accelerator, enhancing productivity without the constraints commonly associated with no-code environments. Wizzdi Cloud-generated code is 100% free from platform dependencies, allowing developers to accelerate their work significantly. New users can learn its basic functionality within 30 to 90 minutes, even without prior experience.</p>
<p data-renderer-start-pos="1464">This case study examines the efficiency gains achievable by backend developers using Wizzdi Cloud compared to traditional development methods. The study involved a group of Spring Boot developers who completed the same backend task using both traditional coding and Wizzdi Cloud. Results reveal considerable time savings, particularly for developers who previously trained with Wizzdi Cloud.</p>
<hr role="presentation" />
<h3 id="Methodology" data-renderer-start-pos="1858">Methodology</h3>
<p data-renderer-start-pos="1871"><strong data-renderer-mark="true">Objective</strong><br />
The goal was to measure the efficiency of Wizzdi Cloud in creating a backend system compared to traditional development.</p>
<p data-renderer-start-pos="2003"><strong data-renderer-mark="true">Participants</strong><br />
Four backend developers proficient in Java and Spring Boot were recruited, each with an average of three years of experience. The group included three developers (Developers A, B, and C) who had no prior experience with Wizzdi Cloud and one experienced Wizzdi Cloud user (Developer D).</p>
<p data-renderer-start-pos="2303"><strong data-renderer-mark="true">Task Description</strong><br />
Developers were tasked with building a backend system to manage books, authors, and libraries. The system required:</p>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="2439">Entity definitions for <strong data-renderer-mark="true">Book</strong>, <strong data-renderer-mark="true">Book Instance</strong>, <strong data-renderer-mark="true">Author</strong>, <strong data-renderer-mark="true">Genre</strong>, <strong data-renderer-mark="true">Lender</strong>, <strong data-renderer-mark="true">Library</strong>, <strong data-renderer-mark="true">AppUser</strong>, and several linking entities to handle many-to-many relationships.</p>
</li>
<li>
<p data-renderer-start-pos="2594">CRUD REST APIs to manage the entities.</p>
</li>
<li>
<p data-renderer-start-pos="2636">Backend implementation using JPA 2.1 and type-safe criteria API.</p>
</li>
<li>
<p data-renderer-start-pos="2704">User management endpoints for registration and login.</p>
</li>
<li>
<p data-renderer-start-pos="2761">Docker script for launching the server in one command.</p>
</li>
</ul>
<p data-renderer-start-pos="2819"><strong data-renderer-mark="true">Process</strong></p>
<ol class="ak-ol" start="1" data-indent-level="1">
<li>
<p data-renderer-start-pos="2830">Each developer was first asked to complete the task using standard development.</p>
</li>
<li>
<p data-renderer-start-pos="2913">Developers with no prior Wizzdi Cloud experience (A, B, C) were then introduced to Wizzdi Cloud.</p>
</li>
<li>
<p data-renderer-start-pos="3013">They were allowed a short learning period with the platform and asked to complete the task again on Wizzdi Cloud.</p>
</li>
<li>
<p data-renderer-start-pos="3130">Developer D, already familiar with Wizzdi Cloud, completed the task on the platform for comparative purposes.</p>
</li>
</ol>
<hr role="presentation" />
<h3 id="Results" data-renderer-start-pos="3244">Results</h3>
<p data-renderer-start-pos="3253">The results show a significant reduction in development time for those using Wizzdi Cloud.</p>
<div class="pm-table-container with-shadow-observer" data-layout="custom">
<div class="pm-table-sticky-scrollbar-sentinel-top" data-testid="sticky-scrollbar-sentinel-top"></div>
<div class="cc-12efcmn"></div>
<div class="pm-table-wrapper">
<div class="sentinel-left"></div>
<table style="height: 329px;" width="1363" data-testid="renderer-table" data-number-column="false" data-table-width="760" data-layout="default">
<colgroup>
<col />
<col />
<col />
<col /></colgroup>
<tbody>
<tr>
<th class="ak-renderer-tableHeader-sortable-column__wrapper" colspan="1" rowspan="1" aria-sort="none">
<div class="ak-renderer-tableHeader-sortable-column">
<p data-renderer-start-pos="3348">Developer</p>
<figure class="ak-renderer-tableHeader-sorting-icon__wrapper ak-renderer-tableHeader-sorting-icon__no-order">
<div role="presentation">
<div class="ak-renderer-tableHeader-sorting-icon  cc-nnufw" tabindex="0" role="button" aria-label="No sort applied to the column" aria-disabled="false">
<div class="sorting-icon-svg__no_order ak-renderer-tableHeader-sorting-icon-inactive cc-37vp66">
<div class="cc-5gbtdb"></div>
</div>
</div>
</div>
</figure>
</div>
</th>
<th class="ak-renderer-tableHeader-sortable-column__wrapper" colspan="1" rowspan="1" aria-sort="none">
<div class="ak-renderer-tableHeader-sortable-column">
<p data-renderer-start-pos="3361">Time to Complete (Traditional)</p>
<figure class="ak-renderer-tableHeader-sorting-icon__wrapper ak-renderer-tableHeader-sorting-icon__no-order">
<div role="presentation">
<div class="ak-renderer-tableHeader-sorting-icon  cc-nnufw" tabindex="0" role="button" aria-label="No sort applied to the column" aria-disabled="false">
<div class="sorting-icon-svg__no_order ak-renderer-tableHeader-sorting-icon-inactive cc-37vp66">
<div class="cc-5gbtdb"></div>
</div>
</div>
</div>
</figure>
</div>
</th>
<th class="ak-renderer-tableHeader-sortable-column__wrapper" colspan="1" rowspan="1" aria-sort="none">
<div class="ak-renderer-tableHeader-sortable-column">
<p data-renderer-start-pos="3395">Time to Learn Wizzdi Cloud</p>
<figure class="ak-renderer-tableHeader-sorting-icon__wrapper ak-renderer-tableHeader-sorting-icon__no-order">
<div role="presentation">
<div class="ak-renderer-tableHeader-sorting-icon  cc-nnufw" tabindex="0" role="button" aria-label="No sort applied to the column" aria-disabled="false">
<div class="sorting-icon-svg__no_order ak-renderer-tableHeader-sorting-icon-inactive cc-37vp66">
<div class="cc-5gbtdb"></div>
</div>
</div>
</div>
</figure>
</div>
</th>
<th class="ak-renderer-tableHeader-sortable-column__wrapper" colspan="1" rowspan="1" aria-sort="none">
<div class="ak-renderer-tableHeader-sortable-column">
<p data-renderer-start-pos="3425">Time to Complete (Wizzdi Cloud)</p>
<figure class="ak-renderer-tableHeader-sorting-icon__wrapper ak-renderer-tableHeader-sorting-icon__no-order">
<div role="presentation">
<div class="ak-renderer-tableHeader-sorting-icon  cc-nnufw" tabindex="0" role="button" aria-label="No sort applied to the column" aria-disabled="false">
<div class="sorting-icon-svg__no_order ak-renderer-tableHeader-sorting-icon-inactive cc-37vp66">
<div class="cc-5gbtdb"></div>
</div>
</div>
</div>
</figure>
</div>
</th>
</tr>
<tr>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3462">A</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3467">419 minutes</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3482">N/A</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3489">N/A</p>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3498">B</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3503">639 minutes</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3518">50 minutes</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3532">22 minutes</p>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3548">C</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3553">340 minutes</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3568">N/A</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3575">N/A</p>
</td>
</tr>
<tr>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3584">D</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3589">N/A</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3596">N/A</p>
</td>
<td colspan="1" rowspan="1">
<p data-renderer-start-pos="3603">9 minutes</p>
</td>
</tr>
</tbody>
</table>
<div class="sentinel-right"></div>
</div>
<div class="pm-table-sticky-scrollbar-container">
<div></div>
</div>
<div class="pm-table-sticky-scrollbar-sentinel-bottom" data-testid="sticky-scrollbar-sentinel-bottom"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-4153 size-large" src="https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1-1024x660.png" alt="Study Graph" width="800" height="516" srcset="https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1-1024x660.png 1024w, https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1-300x193.png 300w, https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1-768x495.png 768w, https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1-1536x991.png 1536w, https://wizzdi.com/wp-content/uploads/2024/11/ce59f217-487b-4bfa-a176-ccb0b0ee78d1.png 1707w" sizes="(max-width: 800px) 100vw, 800px" /></div>
</div>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="3626"><strong data-renderer-mark="true">Developer B</strong>: Despite being new to Wizzdi Cloud, Developer B completed the task in only 22 minutes after a brief 50-minute learning period.</p>
</li>
<li>
<p data-renderer-start-pos="3768"><strong data-renderer-mark="true">Developer D</strong>: An experienced Wizzdi Cloud user, Developer D completed the task in just 9 minutes.</p>
</li>
<li>
<p data-renderer-start-pos="3868">Developers A and C, who worked using traditional development methods alone, took significantly longer to complete the task, ranging from 340 to 639 minutes.</p>
</li>
</ul>
<p data-renderer-start-pos="4028">The results underscored such a large efficiency gap that further testing was halted for Developers A and C, as it was clear they would not match the speed achievable on Wizzdi Cloud.</p>
<hr role="presentation" />
<h3 id="Discussion" data-renderer-start-pos="4213">Discussion</h3>
<p data-renderer-start-pos="4225">The study illustrates the impact of Wizzdi Cloud&#8217;s no-code capabilities on backend development. Even developers with no previous experience saw a remarkable reduction in task completion time after a short training session. Wizzdi Cloud’s automatic handling of non-domain logic—such as API, criteria API implementation, and containerization—streamlines backend setup and enables developers to focus on core business logic.</p>
<p data-renderer-start-pos="4648">Developers new to the platform achieved up to 30 times acceleration in task completion when using Wizzdi Cloud over traditional development environments. For experienced users, the speed was even more pronounced, reflecting the value of familiarity with the platform.</p>
<h3 id="Conclusion" data-renderer-start-pos="4917">Conclusion</h3>
<p data-renderer-start-pos="4929">Wizzdi Cloud enables backend developers to significantly accelerate their workflows, achieving up to 30-fold improvements in speed without sacrificing the flexibility of traditional coding tools. The platform’s ability to generate fully independent, standard-compliant code offers developers the best of both worlds—speed and integration with traditional development workflows. Wizzdi Cloud is positioned as a powerful tool for organizations seeking to maximize efficiency in backend development without compromising code portability or flexibility.</p>
<h3 id="Future-Research" data-renderer-start-pos="5480">Future Research</h3>
<p data-renderer-start-pos="5497">Future research will examine hybrid workflows that combine Wizzdi Cloud with traditional development environments, assessing whether combining both approaches yields further benefits. Additionally, research will focus on more complex projects that go beyond domain modeling and CRUD operations to explore Wizzdi Cloud&#8217;s capabilities in areas like security, business logic, and third-party integrations.</p><p>The post <a href="https://wizzdi.com/docs/blog/efficiency-gains-in-backend-development-using-wizzdi-cloud/">Efficiency Gains in Backend Development Using Wizzdi Cloud</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Is No-Code Right for Your Startup?</title>
		<link>https://wizzdi.com/docs/blog/is-no-code-right-for-your-startup/</link>
		
		<dc:creator><![CDATA[avishay]]></dc:creator>
		<pubDate>Mon, 26 Aug 2024 07:36:48 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=3461</guid>

					<description><![CDATA[<p>Introduction In this short blog, we are discussing the merits and drawbacks of no-code systems. For startups, building a minimum-value product is often the only visible goal. Resources may be scarce, and entrepreneurs may prefer to avoid hiring developers, even if it may require them to rewrite an application once resources are available. What are [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/blog/is-no-code-right-for-your-startup/">Is No-Code Right for Your Startup?</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 id="Introduction" data-renderer-start-pos="1">Introduction</h2>
<p data-renderer-start-pos="15">In this short blog, we are discussing the merits and drawbacks of no-code systems. For startups, building a minimum-value product is often the only visible goal.</p>
<p data-renderer-start-pos="178">Resources may be scarce, and entrepreneurs may prefer to avoid hiring developers, even if it may require them to rewrite an application once resources are available.</p>
<h2 id="What-are-no-code-systems?" data-renderer-start-pos="345">What are no code systems?</h2>
<p data-renderer-start-pos="372">No-code systems are platforms or tools that enable users to create software applications without coding. These systems offer a visual development environment where users can drag and drop components, configure workflows, and set up integrations to build fully functional applications. The main objective of no-code systems is to make software development accessible to individuals who do not possess conventional programming skills.</p>
<h2 id="Common-Use-Cases" data-renderer-start-pos="808">Common Use Cases</h2>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="828">Internal Tools<strong data-renderer-mark="true">:</strong> Companies often use no-code platforms to build internal tools, dashboards, and workflow automation to streamline business processes.</p>
</li>
<li>
<p data-renderer-start-pos="980">MVP Development: Startups can use no-code tools to build Minimum Viable Products (MVPs) and quickly validate ideas before committing to full-scale development.</p>
</li>
<li>
<p data-renderer-start-pos="1143">Automating Business Processes: No-code platforms are commonly used to automate repetitive tasks such as data entry, reporting, and communication workflows.</p>
</li>
</ul>
<h2 id="Atypical-Use-Cases" data-renderer-start-pos="1302">Atypical Use Cases</h2>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="1324">Large-scale applications that serve a large number of users.</p>
</li>
<li>
<p data-renderer-start-pos="1389">Applications with complex security requirements and advanced data access control.</p>
</li>
<li>
<p data-renderer-start-pos="1474">Applications with complex integration requirements.</p>
</li>
<li>
<p data-renderer-start-pos="1530">Enterprise-grade applications.</p>
</li>
<li>
<p data-renderer-start-pos="1564"><a class="cc-1rn59kg" title="https://en.wikipedia.org/wiki/Software_as_a_service" href="https://en.wikipedia.org/wiki/Software_as_a_service" data-testid="link-with-safety" data-renderer-mark="true">SaaS </a>applications supporting <a class="cc-1rn59kg" title="https://en.wikipedia.org/wiki/Multitenancy" href="https://en.wikipedia.org/wiki/Multitenancy" data-testid="link-with-safety" data-renderer-mark="true">multitenancy</a>.</p>
</li>
</ul>
<h2 id="The-Benefits-of-No-Codes-Systems." data-renderer-start-pos="1610">The Benefits of No Codes Systems</h2>
<h3 id="Speed-of-Development" data-renderer-start-pos="1645">Speed of Development</h3>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="1669">No-code platforms allow you to quickly bring your ideas to life, enabling rapid prototyping and iteration without waiting for a complete development cycle.</p>
</li>
<li>
<p data-renderer-start-pos="1828">Time to Market<strong data-renderer-mark="true">:</strong> If your startup needs to launch a product or service quickly, using a no-code solution can significantly reduce development time, enabling you to capture opportunities faster.</p>
</li>
</ul>
<h3 id="Cost-Reduction" data-renderer-start-pos="2023">Cost Reduction</h3>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="2041">Cost-Effective Development<strong data-renderer-mark="true">:</strong> No-code platforms do not require a large development team, lowering the initial costs of custom coding.</p>
</li>
</ul>
<h3 id="Allow-more-people-to-participate." data-renderer-start-pos="2177">Allow more people to participate</h3>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="2215">When your team lacks technical expertise, a no-code platform allows you to create and manage applications without hiring expensive developers.</p>
</li>
<li>
<p data-renderer-start-pos="2361">No-code systems allow entrepreneurs to focus on their business strategy and operations instead of getting bogged down by technical challenges.</p>
</li>
</ul>
<h3 id="Fits-the-startup’s-early-stage." data-renderer-start-pos="2507">Fits the startup’s early stage</h3>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="2543">No-code platforms are ideal for startups in the early stages, where the focus is on validating the idea rather than scaling rapidly.</p>
</li>
</ul>
<h2 id="The-drawbacks." data-renderer-start-pos="2679">The drawbacks</h2>
<p data-renderer-start-pos="2695"><strong data-renderer-mark="true">Most drawbacks are irrelevant if you plan to build a minimum viable product (MVP), knowing that a rewrite from scratch will be required.</strong></p>
<p data-renderer-start-pos="2833">In a recent user survey conducted on Reddit, the following drawbacks were specified by readers:</p>
<figure id="attachment_3462" aria-describedby="caption-attachment-3462" style="width: 1000px" class="wp-caption aligncenter"><img decoding="async" class="wp-image-3462" src="https://wizzdi.com/wp-content/uploads/2024/08/graph.jpg" alt="" width="1000" height="616" srcset="https://wizzdi.com/wp-content/uploads/2024/08/graph.jpg 1344w, https://wizzdi.com/wp-content/uploads/2024/08/graph-300x185.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/08/graph-1024x631.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/08/graph-768x473.jpg 768w" sizes="(max-width: 1000px) 100vw, 1000px" /><figcaption id="caption-attachment-3462" class="wp-caption-text"><strong>A Reddit survey in percent.</strong></figcaption></figure>
<h2 id="Vendor-Lock-In" data-renderer-start-pos="2978">Vendor Lock-In</h2>
<p data-renderer-start-pos="2994">More than half of the users consider this the main issue with no-code systems. Vendor lock-in has several implications, some of which are not immediately apparent when implementing a new system.</p>
<h4 id="Intellectual-Property-lock-in" data-renderer-start-pos="3190">Intellectual Property lock-in</h4>
<p data-renderer-start-pos="3221">Almost all no-code systems are designed to run exclusively within their environment, utilizing libraries and paradigms specific to the platform. As a result, any intellectual property created within the no-code platform has limited usability outside of it.</p>
<h4 id="Deployment-Lock-in" data-renderer-start-pos="3483">Deployment Lock-in</h4>
<p data-renderer-start-pos="3503">Most no-code vendors only allow deployment on their infrastructure. Some offer an on-premises installation option, which can ease the hosting costs. However, this option is still based on proprietary technology that can cease to be developed and maintained.</p>
<p data-renderer-start-pos="3763">Mandatory hosting can lead to uncontrolled and high costs for a startup at the scale-out stage. Some solutions even charge a monthly fee for each end user, who is not a developer but a user of the running system.</p>
<h4 id="Lock-in-through-a-technical-debt." data-renderer-start-pos="3977">Lock in through a technical debt</h4>
<p data-renderer-start-pos="4012">For every no-code system, there may be a small number of knowledgeable developers who can further develop anything you build. Expanding such systems using traditional programming languages is sometimes possible but relies on specific non-standard software interfaces. Covering the technical debt may necessitate a full rewrite using conventional development tools.</p>
<h3 id="Lack-of-some-features" data-renderer-start-pos="4378">Lack of some features</h3>
<p data-renderer-start-pos="4401">No-code systems have a set of features. When a system in development becomes complex, more features are required, and adding them can be impossible or difficult. In that sense, traditional development is way more flexible and practically limitless.</p>
<p data-renderer-start-pos="4651">Unlike the frequent hype, not every missing feature in a no-code system can be implemented via code.</p>
<p data-renderer-start-pos="4753">For example, suppose a no-code system does not support <a title="https://en.wikipedia.org/wiki/Multitenancy" href="https://en.wikipedia.org/wiki/Multitenancy" data-testid="link-with-safety" data-renderer-mark="true">multitenancy </a>or fine-granularity data access control. In that case, it will be tough to add such a feature, as it is built into the system at a deep level.</p>
<p data-renderer-start-pos="4974">If all you aim for is a prototype, you may forgo some features until you complete a rewrite using a traditional development workflow.</p>
<h3 id="Complexity-and-Steep-Learning-Curve." data-renderer-start-pos="5109">Complexity and Steep Learning Curve</h3>
<p data-renderer-start-pos="5147">One of the fallacies associated with no-code development is the belief that ‘<em data-renderer-mark="true">anyone can become a no-code developer</em>.’</p>
<p data-renderer-start-pos="5265">This is as incorrect as claiming anyone can master Photoshop or Excel.</p>
<p data-renderer-start-pos="5337">Powerful no-code platforms are designed to solve complex problems and have many features and workflows that must be mastered.</p>
<p data-renderer-start-pos="5464">To successfully use a no-code system, you need to:</p>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="5518">Deeply understand the application domain in which your product operates. This is crucial for designing any system using any development workflows and tools.</p>
</li>
<li>
<p data-renderer-start-pos="5678">Be willing to invest time in learning, trying, and making mistakes.</p>
</li>
<li>
<p data-renderer-start-pos="5749">Understand that you may need developers&#8217; help even before a Minimum Viable Product is completed, let alone when you need to scale.</p>
</li>
<li>
<p data-renderer-start-pos="5883">Understand that a system cannot be viewed through its user interface. Sometimes, entrepreneurs see only the user interface of their product. In most cases, the backend matters more.</p>
</li>
<li>
<p data-renderer-start-pos="6068">Realize that many workflows are faster to implement in a no-code system while others may be faster to code. Developers tend to prefer doing everything in code.</p>
</li>
</ul>
<h3 id="Low-performance-of-the-created-App." data-renderer-start-pos="6231">Low performance of the created App</h3>
<p data-renderer-start-pos="6268">A discussion of the two main no-code deployment types is required to understand the reason for this observation.</p>
<p data-renderer-start-pos="6382">In general, no-code systems are implemented using two main approaches:</p>
<p data-renderer-start-pos="6455"><strong data-renderer-mark="true">The Immediate Execution System.</strong></p>
<ul class="ak-ul" data-indent-level="1">
<li>
<p data-renderer-start-pos="6490">Immediate execution systems offer immediate feedback as you develop without compiling a target code. You can sometimes identify such a system by adding data to your data store immediately after defining an entity. The runtime and design phase are intermixed. However, these systems typically run slower in production and require more resources to prevent slowdowns. It can be confidently stated that these systems do not provide any flexibility in deployment, whether on-premises or elsewhere. Some of the vendors offer a guarantee that in the case of going out of business, they will allow on-premise deployment; no one has ever tried that….</p>
</li>
</ul>
<p data-renderer-start-pos="7136">The Immediate Execution System may have an advantage related to debugging an application.</p>
<p data-renderer-start-pos="7232"><strong data-renderer-mark="true">The Code Generators</strong></p>
<ul data-indent-level="1">
<li>
<p data-renderer-start-pos="7255">Systems that compile a target image include the necessary dependencies and database setup. These systems separate the design phase from the deployment phase. The deployment becomes available after a noticeable amount of time is needed to prepare a deployable image. Such systems may deliver better performance once the runtime is deployed, and their performance is inherently similar to compiled code in other programming workflows and tools. Deploying these solutions on-premises or outside a no-code vendor’s cloud is more practical.</p>
</li>
</ul>
<div data-level="1">
<p data-renderer-start-pos="7794">Implementing debugging and testing services in such systems is more challenging for the no-code system provider.</p>
</div>
<h3 id="Data-lock-in" data-renderer-start-pos="7908">Data lock-in</h3>
<p data-renderer-start-pos="7922">This is a frequently overlooked disadvantage. One of the main assets of any organization is the collected data.</p>
<p data-renderer-start-pos="8036">Most no-code vendors do not provide an easy way to access the data accumulated in their systems.</p>
<p data-renderer-start-pos="8135">Apis for accessing the data can be implemented on some of the systems, but direct access to the database server, if one exists as such, is unavailable.</p>
<p data-renderer-start-pos="8288">When you have control over the deployment and can access the database anytime, you can back it up, clone it, or copy data from specific tables/collections.</p>
<p data-renderer-start-pos="8445">Data lock-in may be critical when switching from a no-code solution to a traditional development solution, as the accumulated data may be valuable.</p>
<h2 id="Conclusion" data-renderer-start-pos="8596">Conclusion</h2>
<p data-renderer-start-pos="8608">In summary, while no-code systems offer significant benefits in speed, cost, and accessibility, especially for startups and small businesses, they also have inherent limitations that can affect scalability, flexibility, and long-term sustainability. These platforms are great for quickly bringing ideas to life, building MVPs, and streamlining internal processes. However, for more complex, large-scale applications or those with specific security and integration requirements, the disadvantages of no-code systems—such as vendor lock-in, limited features, and potential data lock-in—can present significant challenges.</p>
<p data-renderer-start-pos="9229">When evaluating a no-code platform, it&#8217;s crucial to determine if it meets your project&#8217;s specific requirements and long-term goals. For early-stage startups, the benefit of rapidly prototyping and validating ideas might outweigh any potential drawbacks, making no-code an attractive option. However, as your business grows and your technical needs evolve, transitioning to traditional development may be essential to maintain control, flexibility, and performance.</p>
<p data-renderer-start-pos="9706">Fortunately, recent no-code developments address most of these challenges while retaining the benefits. For example, <strong data-renderer-mark="true">no-lock,</strong> no-code platforms like <strong data-renderer-mark="true">Flutter Flow </strong>for the front end and <strong data-renderer-mark="true">Wizzdi Cloud</strong> for the backend offer more flexibility by allowing users to export clean, usable code that isn&#8217;t tied to a specific vendor&#8217;s ecosystem. This approach mitigates the risk of vendor lock-in and provides greater control over the deployment and future development of the application.</p>
<p data-renderer-start-pos="10183">As the demand for no-code solutions continues to grow, more vendors will likely adopt similar approaches, offering tools that combine the speed and accessibility of no-code with the flexibility and control typically associated with traditional development. This evolution could make no-code platforms an even more attractive option for a broader range of projects, allowing businesses to leverage the best of both worlds.</p>
<h2 data-renderer-start-pos="10183"></h2>
<p><strong>In my next article, I will share my journey while building a complex parking platform using no-code.</strong></p>
<p>&nbsp;</p><p>The post <a href="https://wizzdi.com/docs/blog/is-no-code-right-for-your-startup/">Is No-Code Right for Your Startup?</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Building My Pizza Delivery App: A Developer&#8217;s Journey</title>
		<link>https://wizzdi.com/docs/blog/building-my-pizza-delivery-app-a-developers-journey/</link>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 08 Aug 2024 22:49:02 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=3380</guid>

					<description><![CDATA[<p>Building My Pizza Delivery App: A Developer&#8217;s Journey introduction As someone who enjoys developing software as a hobby, I have been particularly interested in VueJS and have worked on various front-end projects. Recently, a family friend who owns a rapidly expanding local pizza chain asked me for help. He was dissatisfied with the current delivery [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/blog/building-my-pizza-delivery-app-a-developers-journey/">Building My Pizza Delivery App: A Developer’s Journey</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1 class="font-600 text-2xl font-bold">Building My Pizza Delivery App: A Developer&#8217;s Journey</h1>
<h2 class="font-600 text-xl font-bold">introduction</h2>
<p>As someone who enjoys developing software as a hobby, I have been particularly interested in VueJS and have worked on various front-end projects. Recently, a family friend who owns a rapidly expanding local pizza chain asked me for help. He was dissatisfied with the current delivery apps and wanted one that could better reflect his brand – something modern, user-friendly, and adaptable to his business&#8217;s requirements.</p>
<p>Using a no-code backend platform was a strategic decision to bypass the complexities of backend development, allowing me to concentrate on what I do best: crafting a seamless and attractive user interface. With a no-code solution, I could effortlessly integrate essential features such as payment processing, order tracking, and real-time communication, which are typically time-consuming to implement. This approach significantly expedited the development process, enabling me to focus on enhancing the front end with VueJS, ensuring the app was functional, aesthetically pleasing, and intuitive.</p>
<p>&nbsp;</p>
<p>The process of creating this pizza delivery app was both thrilling and challenging. It required me to integrate technical skills with creative design in order to offer a complete solution that would be attractive to both management, customers, and delivery staff. The choice to use a no-code backend was essential as it allowed me the flexibility to focus on the user interface and guarantee that the app could be easily scaled and adapted for use on various devices, from desktops to mobile phones.</p>
<h2 class="font-600 text-xl font-bold">Objectives</h2>
<p class="whitespace-pre-wrap break-words">The post will delve into the main reasons for selecting a no-code backend platform, the steps involved in defining the app&#8217;s vision for various user groups, the careful design of the domain model, the integration and automation of business processes, and the challenges encountered and how they were resolved during the development process.</p>
<h2 class="font-600 text-xl font-bold">Why a No-Code Backend Platform?</h2>
<p class="whitespace-pre-wrap break-words">Opting for a no-code platform, especially for the backend, was strategic due to several key factors:</p>
<ul class="-mt-1 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Multiple User Interfaces</strong>: The application must support various user interfaces to provide a consistent user experience across different devices.</li>
<li class="whitespace-normal break-words"><strong>Rapid Development</strong>: The no-code approach accelerated the development process, enabling me to focus more on functionality and user experience.</li>
<li class="whitespace-normal break-words"><strong>Ease of Integration</strong>: The platform simplified complex processes by providing built-in support for integrations like payment gateways and real-time communication.</li>
<li class="whitespace-normal break-words"><strong>Scalability and Flexibility</strong>: It provided the infrastructure to adapt to changing business requirements and user needs.</li>
<li class="whitespace-normal break-words"><strong>Cost Efficiency</strong>: The platform provided a cost-effective solution for building and maintaining the backend by reducing the need for extensive coding.</li>
</ul>
<p class="whitespace-pre-wrap break-words">However, the decision to use a no-code platform was challenging. One of the initial hurdles was ensuring that the platform could seamlessly integrate with the various user interfaces required for the app. This was overcome by carefully researching and evaluating the platform&#8217;s integration capabilities and thoroughly testing the integration process.</p>
<h2 class="font-600 text-xl font-bold">The Vision</h2>
<p class="whitespace-pre-wrap break-words">Before starting the development process, I carefully outlined the app&#8217;s objectives for each user group to ensure that the solution effectively met all their needs. I aimed to create a valuable tool for management, customers, and delivery personnel.</p>
<h3 class="font-600 text-lg font-bold">For Management:</h3>
<ul class="-mt-1 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Branch Management</strong>: Tools for managers to add, update, and organize branches to track various locations efficiently.</li>
<li class="whitespace-normal break-words"><strong>Topping Management</strong>: A system for managing menu items ensures that offerings are current and reflect inventory and customer preferences.</li>
</ul>
<h3 class="font-600 text-lg font-bold">For Customers:</h3>
<ul class="-mt-1 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Order Creation and Customization</strong>: A seamless process for creating and customizing orders, including a smooth checkout experience with PayPal.</li>
<li class="whitespace-normal break-words"><strong>Real-Time Tracking</strong>: With WebSocket technology, customers can track their delivery from preparation to arrival.</li>
</ul>
<h3 class="font-600 text-lg font-bold">For Delivery Personnel:</h3>
<ul class="-mt-1 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Efficient Communication</strong>: The server automatically receives the location of delivery personnel, enabling better customer service and management tools.</li>
</ul>
<p class="whitespace-pre-wrap break-words">During the vision-defining stage, one of the challenges we faced was ensuring that the app&#8217;s features and functionality met the needs of all user groups without becoming overly complex. We addressed this by carefully prioritizing the most critical requirements and iterating on the design to balance comprehensiveness and usability.</p>
<h2 class="font-600 text-xl font-bold">The Domain Model</h2>
<p class="whitespace-pre-wrap break-words">The design of the domain model was crucial for building the entire pizza delivery app. It was a key step in determining the app&#8217;s functionality and ensuring smooth data management. Instead of just listing entities and their relationships, I aimed to bring this process to life and highlight the thought and creativity behind it.</p>
<h3 class="font-600 text-lg font-bold">Laying the Groundwork: Basic and SecuredBasic</h3>
<p class="whitespace-pre-wrap break-words">At the very core of the domain model, I established the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">Basic</code> and <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">SecuredBasic</code> entities. These served as the building blocks, providing a standardized structure for all records in the system. The <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">Basic</code> entity encapsulated essential fields like <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">id</code>, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">name</code>, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">creationDate</code>, and <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">updateDate</code> &#8211; a common thread that ran through the entire database.</p>
<p class="whitespace-pre-wrap break-words">Extending this foundation, the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">SecuredBasic</code> entity introduced an additional <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">creator</code> field, allowing me to link each record to a specific user. This enhanced the app&#8217;s security and paved the way for personalized experiences and user-specific data management.</p>
<h3 class="font-600 text-lg font-bold">Mapping the Pizza Ecosystem</h3>
<p class="whitespace-pre-wrap break-words">After laying the groundwork, I created the components to bring the pizza delivery app to life. One of the main components captured the information of each pizza store, such as its location coordinates. This was crucial as it enabled the system to monitor orders for each store, making delivery routes and times more efficient.</p>
<p class="whitespace-pre-wrap break-words">Closely tied to the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">Branch</code> was the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">PizzaOrder</code> entity, which extended the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">SecuredBasic</code> structure. This entity was responsible for meticulously tracking the status of each order, guiding it through the various stages &#8211; from <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">DRAFT</code> to <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">STARTED</code>, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">PREPARE</code>, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">BAKING</code>, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">DELIVERY</code>, and finally, <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">COMPLETE</code>. This level of granularity ensured that both customers and management could stay informed every step of the way.</p>
<h3 class="font-600 text-lg font-bold">Customizing the Perfect Pizza</h3>
<p class="whitespace-pre-wrap break-words">At the heart of the app&#8217;s functionality was the ability for customers to create and customize their pizzas. The <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">Pizza</code> entity captured the details of each pie, with a direct relationship to the <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">PizzaTopping</code> entity. This allowed for an endless combination of toppings, each with its price, to be added to the order.</p>
<p class="whitespace-pre-wrap break-words">The <code class="bg-bg-300 text-accent-secondary-000 whitespace-pre-wrap rounded-[0.3rem] px-1 py-px text-[0.95em]">Topping</code> entity served as the master repository of available toppings, providing a centralized and easily manageable system for the pizza business to maintain its menu. With this domain model in place, the app could not only handle the standard pizza orders but also cater to each customer&#8217;s unique preferences.</p>
<h3 class="font-600 text-lg font-bold">Bringing it All Together</h3>
<p class="whitespace-pre-wrap break-words">By meticulously designing this domain model, I created a robust and flexible system that could adapt to the dynamic needs of the pizza delivery business. Each entity and relationship was carefully considered, balancing comprehensiveness and ease of use. This foundational work paved the way for the seamless integration and automation of the app&#8217;s core business processes.</p>
<h2 class="font-600 text-2xl font-bold">Payment and Real-Time Location</h2>
<p><img decoding="async" class="wp-image-3372 size-medium alignleft" src="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3-300x148.png" alt="" width="300" height="148" srcset="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-checkout-validated-webhook-flow3.png 1920w" sizes="(max-width: 300px) 100vw, 300px" /> <img loading="lazy" decoding="async" class="wp-image-3373 size-medium alignleft" src="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary-300x148.png" alt="" width="300" height="148" srcset="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-order-summary.png 1920w" sizes="(max-width: 300px) 100vw, 300px" /> <img loading="lazy" decoding="async" class="wp-image-3374 size-medium alignleft" src="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow-300x148.png" alt="" width="300" height="148" srcset="https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/08/pizza-delivery-app-update-pizza-order-flow.png 1920w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<div class="font-claude-message pr-4 md:pr-9 relative leading-[1.65rem] [&amp;_pre&gt;div]:bg-bg-300 [&amp;_pre]:-mr-4 md:[&amp;_pre]:-mr-9">
<div class="grid-col-1 grid gap-2.5 [&amp;_&gt;_*]:min-w-0">
<p class="whitespace-pre-wrap break-words">The first step was creating the domain model. Now, the main challenges were processing payments and updating order status and delivery location in real-time. This was the critical stage where I needed to ensure a seamless and transparent experience for both customers and the pizza business.</p>
<h3 class="font-600 text-xl font-bold">Checkout Process Made Simple</h3>
<p class="whitespace-pre-wrap break-words">The <strong>PrepareCheckoutFlow</strong> was one of the first I designed. This flow initiates the payment request and securely transfers the user to PayPal for further processing.</p>
<h3 class="font-600 text-xl font-bold">Validating Payments with PayPal Webhooks</h3>
<p class="whitespace-pre-wrap break-words">The <strong>CheckoutValidatedWebhookFlow</strong> comes into play next. Once the payment is processed on the PayPal side, they trigger a webhook call to this flow.  I implemented a validation process to ensure the incoming request was indeed from PayPal. By executing a <em>validate</em> API call with PayPal, I could confirm the transaction&#8217;s authenticity before updating the order&#8217;s status accordingly.</p>
<h3 class="font-600 text-xl font-bold">Providing a Clear Order Summary</h3>
<p class="whitespace-pre-wrap break-words">Next, I tackled the <strong>OrderSummaryFlow</strong>. I needed a way to display a comprehensive order summary for the user interface, including all the selected pizzas, toppings, and pricing. This flow aggregates all the relevant information and sends it back as a single, easy-to-consume object, ensuring the UI can present a clear and transparent view of the customer&#8217;s order.</p>
<h3 class="font-600 text-xl font-bold">Keeping Customers Informed in Real-Time</h3>
<p class="whitespace-pre-wrap break-words">Perhaps the most customer-centric, the <strong>UpdatePizzaOrderFlow</strong> is designed to update customers about their order status and the delivery driver&#8217;s location in real-time. This works because the delivery driver&#8217;s app sends their latitude and longitude coordinates at frequent intervals. This flow is triggered whenever a pizza order is updated, allowing it to send the latest location updates to the customer via WebSocket.</p>
<p>&nbsp;</p>
</div>
</div>
<p class="whitespace-pre-wrap break-words">Interested in learning more about the app?</p>
<ul class="-mt-1 list-disc space-y-2 pl-8">
<li class="whitespace-normal break-words"><strong>Code Repository</strong>:<a href="https://github.com/wizzdi/pizza-delivery"> [Link to code]</a></li>
<li class="whitespace-normal break-words"><strong>App</strong>: <a href="https://cloud.wizzdi.com/main/app-details?appId=29f50e62-5bad-4587-b42d-81af4cd027f6&amp;overViewType=projectGroup&amp;entryId=23eff044-f53c-4e44-91bc-8f9a8ca18d9c&amp;marketplace=public">[Link to App]</a></li>
</ul>
<p class="whitespace-pre-wrap break-words"><p>The post <a href="https://wizzdi.com/docs/blog/building-my-pizza-delivery-app-a-developers-journey/">Building My Pizza Delivery App: A Developer’s Journey</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Wizzdi in Action 1 min Video</title>
		<link>https://wizzdi.com/docs/videos/wizzdi-in-action/</link>
					<comments>https://wizzdi.com/docs/videos/wizzdi-in-action/#respond</comments>
		
		<dc:creator><![CDATA[mani]]></dc:creator>
		<pubDate>Mon, 08 Jul 2024 05:08:30 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=3014</guid>

					<description><![CDATA[]]></description>
										<content:encoded><![CDATA[<p><iframe title="YouTube video player" src="https://www.youtube.com/embed/0gZ3yYelyNg?si=pZyl9szg-iHiuWi9" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe></p><p>The post <a href="https://wizzdi.com/docs/videos/wizzdi-in-action/">Wizzdi in Action 1 min Video</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/videos/wizzdi-in-action/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pizza Delivery App</title>
		<link>https://wizzdi.com/docs/projects/pizza-delivery-app/</link>
					<comments>https://wizzdi.com/docs/projects/pizza-delivery-app/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 01 May 2024 12:04:35 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1931</guid>

					<description><![CDATA[<p>Introduction this Section&#8217;s purpose is to take you through the process of building a Pizza Delivery App. the backend will serve multiple clients: the management &#8211; used by management managing branches managing toppings the user app &#8211; used by customer to order pizza allows creating a new order adding multiple pizzas adding toppings for a [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/projects/pizza-delivery-app/">Pizza Delivery App</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Introduction</h1>
<p>this Section&#8217;s purpose is to take you through the process of building a Pizza Delivery App.</p>
<p>the backend will serve multiple clients:</p>
<ol>
<li>the management &#8211; used by management
<ol>
<li>managing branches</li>
<li>managing toppings</li>
</ol>
</li>
<li>the user app &#8211; used by customer to order pizza
<ol>
<li>allows creating a new order</li>
<li>adding multiple pizzas</li>
<li>adding toppings for a pizza</li>
<li>pay via PayPal</li>
<li>track delivery location live using WebSocket</li>
</ol>
</li>
<li>the delivery app &#8211; used by delivery to report location
<ol>
<li>push GPS location</li>
</ol>
</li>
</ol>
<p>the example is <a href="https://cloud.wizzdi.com/main/app-details?appId=76937e40-e487-4d1a-a333-00bd3553bd72&amp;overViewType=projectGroup&amp;entryId=23eff044-f53c-4e44-91bc-8f9a8ca18d9c&amp;marketplace=public">available</a> on wizzdi cloud public marketplace</p>
<p>&nbsp;</p>
<h1>App Overview</h1>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1934 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview-1024x506.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview-1024x506.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview-768x379.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview-1536x758.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-overview.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h1>Domain Model</h1>
<p>in this part we will create the domain model to describe the normal data that is handled in a typical Pizza Restaurant: <strong>Basic,SecuredBasic,</strong><strong>Branch,Topping,PizzaOrder,</strong><strong>OrderStatus,</strong><strong>Pizza</strong><strong>,</strong><strong>PizzaToTopping</strong></p>
<p>the Domain Model Editor is a powerful tool that allows creating connection between entities ,setting indexes , creating inheritance relationship and much more.</p>
<p>for a more extensive view of the Domain Model Editor check its <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-20">documentation</a>.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1935 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model-1024x506.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model-1024x506.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model-768x379.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model-1536x758.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-model.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>The Basic Entity</h2>
<p>The Basic Entity will be used as a <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-30"><em>Mapped Super Class </em></a>for all other Entities , a <em>Mapped Super Class</em> is kind of a Mold for SecuredBasic, Branch and  Topping, this allows us to have the name ,id , creationDate, updateDate of Basic in all the other Entities.</p>
<h2>The SecuredBasic Entity</h2>
<p>The SecuredBasic Entity will be used as a <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-30"><em>Mapped Super Class </em></a>for all other Entities  , this allows us to have the all the fields of Basic Entity as well as the creator field which will hold the creator of the things the customers create , this will automatically filter the data so users only see their own data (except admin users).</p>
<h2>The Branch Entity</h2>
<p>The Branch Entity defines a Branch of our Pizza Restaurant chain, a pizza order will be made at a specific branch</p>
<h2>The Topping Entity</h2>
<p>The Topping Entity defines the possible toppings our Pizza Restaurant chain provides and their price.</p>
<h2>The PizzaOrder Entity</h2>
<p>The PizzaOrder Entity will be used to represent a new Pizza Order</p>
<h2>The OrderStatus Enum</h2>
<p>the OrderStatus Enum is a list of predefined values that will represent the possible Status values a Pizza Order Goes through</p>
<h2>The Pizza Entity</h2>
<p>The Pizza Entity will be used to represent a Pizza in a Pizza Order , we can have many pizzas in a single pizza order</p>
<h2>The PizzaToTopping Entity</h2>
<p>The PizzaToTopping Entity will be used to represent a Topping on a Pizza , the user will be able to select the toppingCoverage , a pizza may have many toppings.</p>
<h1>Exposed APIs</h1>
<p>In this section we can see the automatically CRUD (create, read, update and Delete) APIs.</p>
<p>more options available here such as adding a new custom endpoint , defining if the project is a contract-first of domain-first and much more.</p>
<p>check the <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-50">Exposed API Documentation</a> for an extensive view of it.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1936 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis-1024x506.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis-1024x506.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis-768x379.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis-1536x758.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-consumed-apis.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>&nbsp;</p>
<h2>Custom APIs</h2>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1938" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis-1024x505.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis-1024x505.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis-1536x757.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-custom-apis.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>we have added three APIs in addition to the automatically created CRUD apis;</p>
<ol>
<li>getPizzaOrerSummary &#8211; given a PizzaOrder id will return a summary of the order , we will use this to display a summary of the order before paying , it is connected to the <em>OrderSummayFlow</em>(more on flows later)</li>
<li>prepareCheckout &#8211; given a pizza order id we will start the checkout process with PayPal , it is connected to the <em>PrepareCheckoutFlow</em></li>
<li>completeOrder &#8211; this will be called by PayPal when the order is paid for , providing a PayPal order id we will mark the order as paid and change the PizzaOrder Status , it is connected to the <em>CheckoutValidationWebhookFlow</em></li>
</ol>
<p>&nbsp;</p>
<h1>Flows</h1>
<p>business flows are used to express a custom business logic connected to custom APIs  or other type of triggers (schedule ,event and more) ,</p>
<p>check the <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-83ementor-toc__heading-anchor-50">Flows Documentation</a> for an extensive view of it.</p>
<div class="mceTemp"></div>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1939" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-flows.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>&nbsp;</p>
<h2>OrderSummaryFlow</h2>
<p>the order summary flow is using a Method Definition activity which is written in Java</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1940" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-order-summary.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>PrepareCheckoutFlow</h2>
<p>the <em>PrepareCheckoutFlow</em> will be called when the user tries to pay for an Order , it :</p>
<ol>
<li>fetches the order based on the incoming id</li>
<li>gets the order summary by calling the getSummary method definition (which calls the logic from OrderSummaryFlow)</li>
<li>if a PayPal order id is not set on this order</li>
<li>calls PayPal api with the total that should be paid and the order id</li>
<li>takes PayPal order id from the response and sets it on the order</li>
<li>returns the order</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1941 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow-1024x505.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow-1024x505.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow-1536x757.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-prepare-order-flow.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>&nbsp;</p>
<h2>CheckoutValidationWebhookFlow</h2>
<p>the <em>CheckoutValidationWebhookFlow </em>will be called by PayPal (the url of this API should be set as a webhook in PayPal) when the user successfully paid for an Order , it :</p>
<p>&nbsp;</p>
<ol>
<li>calls the PayPal api to verify the webhook call ( this prevents anyone from simply calling this webhook and impersonate payapl)</li>
<li>if it was not validated &#8211; return failure</li>
<li>fetches the order</li>
<li>updates the order status to <em>STARTED</em></li>
<li>return success</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1954 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-checkout-validated-webhook-flow3.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>UpdatePizzaOrderFlow</h2>
<p>the UpdatePizzaOrderFlow will be trigger when a PizzaOrder is updated (it is triggered by an event), it will push update message of the order status to WebSocket (more on Websocket integration later), this will allow us to update the customer without constantly calling an api to refresh the data , it :</p>
<p>&nbsp;</p>
<ol>
<li>fetches all the websocket sessions that listen to the changed pizza order id</li>
<li>creates an update message that will be sent to all of them</li>
<li>for every session it sends the message</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1944 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-update-pizza-order-flow.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h1>Integrations</h1>
<p>Integrations allow adding additional services to our deployed app , it also adds relevant integration code to the app and adds additional activities to the activities toolbar .</p>
<p>check the <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-120">Integration Documentation</a> for an extensive view of it.</p>
<p>in this application we will be using only one integration &#8211; the websocket integration.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1945" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations-1024x505.png" alt="" width="800" height="395" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations-1024x505.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations-1536x757.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integrations.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>Web Socket Integration</h2>
<p>we are using the websocket integration in our <em>UpdatePizzaOrderFlow</em>, here we define the url of the websocket endpoint (we can have multiple endpoints) , and the message structure that will be used in our websocket endpoint.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1946" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-integration-ws.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h1>Security</h1>
<p>since we have multiple users for our backend it is important that we allow each user to execute only the actions it allowed to do.</p>
<p>additionally we also like to support SSO login and registration.</p>
<h2>SSO Login</h2>
<p>in the sso login area we can define support for sso login /registration , wizzdi cloud support many of the known providers as well as the option to add a custom provider.</p>
<p>check the <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-133">SSO Login Documentation</a> for an extensive view of it.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-1949" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login-1024x504.png" alt="" width="800" height="394" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login-1024x504.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login-768x378.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login-1536x756.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-sso-login.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>Permissions</h2>
<p>in the permissions area we set which roles are allowed to which permissions (this can be done from this screen or from the exposed apis screen by pressing the lock icon next to the api endpoint).</p>
<p>since Branch and Toppings should not be added by normal app users we will allow only admin to manage them.</p>
<p>check the <a href="https://wizzdi.com/wizzdi-cloud-user-guide/#elementor-toc__heading-anchor-135">Permissions Documentation</a> for an extensive view of it.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1951 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions-1024x507.png" alt="" width="800" height="396" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions-1024x507.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions-300x148.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions-768x380.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions-1536x760.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-permissions.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h2>Properties</h2>
<p>finally we need to set some properties to make PayPal SSO Clients work :</p>
<ol>
<li>SSO Clients details , this will require PayPal client and secret</li>
<li>SSO Clients scope &#8211; https://api.paypal.com/v1/payments/.*</li>
<li>SSO Clients token URI &#8211; https://api-m.sandbox.paypal.com/v1/oauth2/token</li>
<li>SSO Clients authorization URI &#8211; https://api-m.sandbox.paypal.com/signin/authorize</li>
</ol>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1952 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties-1024x503.png" alt="" width="800" height="393" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties-1024x503.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties-300x147.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties-768x377.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties-1536x754.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-properties.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<h1>Review</h1>
<h2>Review The Code.</h2>
<p>now the code is available , this example code can be found <a href="https://github.com/wizzdi/pizza-delivery">here.</a></p>
<h2>Review The App&#8217;s API Docs</h2>
<p>The swagger docs for the app is available <a href="https://book-store.asaf-wizzdi-com-s-workspace.cluster.wizzdi.com/swagger-ui.html">here.</a></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1937 size-large" src="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger-1024x509.png" alt="" width="800" height="398" srcset="https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger-1024x509.png 1024w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger-300x149.png 300w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger-768x382.png 768w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger-1536x764.png 1536w, https://wizzdi.com/wp-content/uploads/2024/05/pizza-delivery-app-swagger.png 1920w" sizes="(max-width: 800px) 100vw, 800px" /></p><p>The post <a href="https://wizzdi.com/docs/projects/pizza-delivery-app/">Pizza Delivery App</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/projects/pizza-delivery-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Marketplace</title>
		<link>https://wizzdi.com/docs/documentation/marketplace/</link>
					<comments>https://wizzdi.com/docs/documentation/marketplace/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 18:34:58 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1751</guid>

					<description><![CDATA[<p>Marketplace This is the single public marketplace provided by the Wizzdi software system containing full projects, samples, and projects you can build upon. Cloning from the Marketplace is identical to cloning from any of your Marketplaces. Repositories Binary code repositories are essential tools in software development. They serve as storage and management systems for binary files, including compiled [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/documentation/marketplace/">Marketplace</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wpc--darkluplite-element darkluplite--text">Marketplace</h2>
<p class="wpc--darkluplite-element darkluplite--text">This is the single public marketplace provided by the Wizzdi software system containing full projects, samples, and projects you can build upon. Cloning from the <em class="wpc--darkluplite-element darkluplite--text">Marketplace </em>is identical to cloning from any of your <em class="wpc--darkluplite-element darkluplite--text">Marketplaces</em>.</p>
<h2 class="wpc--darkluplite-element darkluplite--text">Repositories</h2>
<p class="wpc--darkluplite-element darkluplite--text">Binary code repositories are essential tools in software development. They serve as storage and management systems for binary files, including compiled software versions, libraries, and dependencies. Maven Central is one of the most well-known public repositories, primarily serving the Java community. It hosts a vast array of Java libraries and components, allowing developers to integrate and manage dependencies in their Java projects easily.</p>
<p class="wpc--darkluplite-element darkluplite--text">However, in many scenarios, particularly in corporate environments, there’s a need for private repositories. These private repositories store proprietary code, customized libraries, or binaries not meant for public release. They offer several advantages:</p>
<ol class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Security and Control:</strong> Private repositories ensure that sensitive code is not exposed to the public, reducing the risk of security breaches. Companies have full control over who can access and contribute to these repositories.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Customization:</strong> Organizations can host specialized libraries or binaries tailored to their specific requirements, which may not be relevant or available in public repositories.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Integration with Internal Systems:</strong> Private repositories can be integrated with internal development, build, and deployment tools, creating a seamless workflow.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Compliance and Governance:</strong> In industries with strict compliance requirements, private repositories help maintain the necessary standards by controlling the versions and origins of the software components used.</li>
</ol>
<p class="wpc--darkluplite-element darkluplite--text">Setting up a private repository can be achieved using various tools and products. JFrog, for instance, offers a range of solutions in this space. Some of their products, like Artifactory, can be used to set up private repositories. These free and paid versions cater to different scales and requirements.</p>
<p class="wpc--darkluplite-element darkluplite--text">Artifactory is a universal repository manager that supports various package formats, not limited to Java. It can manage NPM for Node.js, NuGet for .NET, Docker images, and many more, making it a versatile choice for multi-technology environments.</p>
<p class="wpc--darkluplite-element darkluplite--text">The process of setting up a private repository typically involves:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Installation and Configuration:</strong> Installing the repository management software on a server or in the cloud and configuring it according to the organization’s requirements.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">User Management:</strong> Setting up user accounts and access controls to manage who can access the repository.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Integration:</strong> Integrating the repository with tools such as continuous integration/continuous deployment (CI/CD) pipelines, source control systems, and build tools.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Maintenance:</strong> Regularly update the repository to ensure it runs smoothly and securely.</li>
</ul>
<p class="wpc--darkluplite-element darkluplite--text">In summary, while public repositories like Maven Central are invaluable for open-source components, private repositories are crucial for managing proprietary, sensitive, or custom software components. Tools like JFrog Artifactory offer flexible solutions to set up and manage these repositories, ensuring security, compliance, and efficiency in software development processes.</p>
<h3 class="wpc--darkluplite-element darkluplite--text">Add a repository</h3>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2626" src="https://wizzdi.com/wp-content/uploads/2024/04/repositories.jpg" alt="" width="1914" height="853" srcset="https://wizzdi.com/wp-content/uploads/2024/04/repositories.jpg 1914w, https://wizzdi.com/wp-content/uploads/2024/04/repositories-300x134.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/repositories-1024x456.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/repositories-768x342.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/repositories-1536x685.jpg 1536w" sizes="(max-width: 1914px) 100vw, 1914px" /></p>
<figure id="attachment_3048" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3048"><figcaption id="caption-attachment-3048" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Manage repositories</figcaption></figure>
<h4 class="wpc--darkluplite-element darkluplite--text"> Repository Details.</h4>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2628" src="https://wizzdi.com/wp-content/uploads/2024/04/edit-new-repository.jpg" alt="" width="859" height="620" srcset="https://wizzdi.com/wp-content/uploads/2024/04/edit-new-repository.jpg 859w, https://wizzdi.com/wp-content/uploads/2024/04/edit-new-repository-300x217.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/edit-new-repository-768x554.jpg 768w" sizes="(max-width: 859px) 100vw, 859px" /></p>
<figure id="attachment_3049" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3049"><figcaption id="caption-attachment-3049" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Edit new repository</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Name: </strong>The repository name</p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Description: </strong>A description of the repository.</p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">URL: </strong>the URL for the repository on the public Internet.</p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Username: </strong>the defined username on the repository.</p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Password: </strong>the password to access the repository.</p>
<p class="wpc--darkluplite-element darkluplite--text"><b class="wpc--darkluplite-element darkluplite--text">Keys: </b>Search for the private keys needed to access the repository in case the repository is accessed with private keys.</p>
<h3 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Manage Keys</strong></h3>
<p class="wpc--darkluplite-element darkluplite--text">Keys for your repositories are managed on the keys tab.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2630" src="https://wizzdi.com/wp-content/uploads/2024/04/keys.jpg" alt="" width="1909" height="753" srcset="https://wizzdi.com/wp-content/uploads/2024/04/keys.jpg 1909w, https://wizzdi.com/wp-content/uploads/2024/04/keys-300x118.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/keys-1024x404.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/keys-768x303.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/keys-1536x606.jpg 1536w" sizes="(max-width: 1909px) 100vw, 1909px" /></p>
<figure id="attachment_3051" class="wp-caption alignnone wpc--darkluplite-element" aria-describedby="caption-attachment-3051"><figcaption id="caption-attachment-3051" class="wp-caption-text wpc--darkluplite-element darkluplite--text">keys management</figcaption></figure>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Add keys</strong></p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2620" src="https://wizzdi.com/wp-content/uploads/2024/04/add-key.jpg" alt="" width="867" height="415" srcset="https://wizzdi.com/wp-content/uploads/2024/04/add-key.jpg 867w, https://wizzdi.com/wp-content/uploads/2024/04/add-key-300x144.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/add-key-768x368.jpg 768w" sizes="(max-width: 867px) 100vw, 867px" /></p>
<figure id="attachment_3052" class="wp-caption alignnone wpc--darkluplite-element" aria-describedby="caption-attachment-3052"><figcaption id="caption-attachment-3052" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Add a new key</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">If you’re not using the contract first approach, then this step is the very first and mandatory one. Once your domain model is ready, you can commit and deploy your app. After deployment, the back end of your app will include the exposed API endpoints that allow you to manage the entities in the domain model.If you’re not using the contract first approach, then this step is the very first and mandatory one. Once your domain model is ready, you can commit and deploy your app. After deployment, the back end of your app will include the exposed API endpoints that allow you to manage the entities in the domain model.If you’re not using the contract first approach, then this step is the very first and mandatory one. Once your domain model is ready, you can commit and deploy your app. After deployment, the back end of your app will include the exposed API endpoints that allow you to manage the entities in the domain model.If you’re not using the contract first approach, then this step is the very first and mandatory one. Once your domain model is ready, you can commit and deploy your app. After deployment, the back end of your app will include the exposed API endpoints that allow you to manage the entities in the domain model.</p><p>The post <a href="https://wizzdi.com/docs/documentation/marketplace/">Marketplace</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/documentation/marketplace/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>My Marketplaces</title>
		<link>https://wizzdi.com/docs/documentation/my-marketplaces/</link>
					<comments>https://wizzdi.com/docs/documentation/my-marketplaces/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 18:34:29 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1749</guid>

					<description><![CDATA[<p>Please see a discussion on My Marketplaces here.</p>
<p>The post <a href="https://wizzdi.com/docs/documentation/my-marketplaces/">My Marketplaces</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Please see a discussion on <em>My Marketplaces </em><a href="https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/#7-toc-title">here</a>.</p><p>The post <a href="https://wizzdi.com/docs/documentation/my-marketplaces/">My Marketplaces</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/documentation/my-marketplaces/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Reusability in Wizzdi Cloud</title>
		<link>https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/</link>
					<comments>https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 18:34:11 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1747</guid>

					<description><![CDATA[<p>Introduction Reusability in Wizzdi Cloud focuses on maximizing the efficiency and utility of applications (Apps) within its ecosystem. This concept is implemented through several key features. Main Concepts Publishing Apps  Wizzdi Cloud allows developers to publish their apps in marketplaces, opening up broader usage and collaboration opportunities. Other users can be invited to these marketplaces [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/">Reusability in Wizzdi Cloud</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1>Introduction</h1>
<p class="wpc--darkluplite-element darkluplite--text">Reusability in Wizzdi Cloud focuses on maximizing the efficiency and utility of applications (Apps) within its ecosystem. This concept is implemented through several key features.</p>
<h1>Main Concepts</h1>
<h2><strong class="wpc--darkluplite-element darkluplite--text">Publishing Apps </strong></h2>
<p>Wizzdi Cloud allows developers to publish their apps in marketplaces, opening up broader usage and collaboration opportunities. Other users can be invited to these marketplaces to discover their apps, use them, or extend their functionalities. This fosters a community of sharing and collaboration and encourages the development of versatile and robust applications.</p>
<h2><strong class="wpc--darkluplite-element darkluplite--text">Cloning </strong></h2>
<p>When an App is available in a marketplace, other users can clone it to their workspaces. This cloning process allows users to take a pre-existing App and adapt or modify it according to their specific needs. This ability to customize and build upon existing Apps significantly reduces development time and effort, promoting a more efficient development process. Cloning is always into a workspace and creates a new App cloned from the previous one.<br />
A new version cannot be re-cloned into the same app.</p>
<h2>Importing</h2>
<p>Rather than cloning, you can import an app directly from a marketplace into your existing application. Unlike simply adding a code dependency, importing enables you to modify the imported app inside your App while maintaining your current App structure. Your App can have an unlimited number of imported apps.<br />
<strong>Note:</strong> In Wizzdi Clud&#8217;s current version, once an app is imported into another app, it cannot be re-imported as a new version.</p>
<h2><strong class="wpc--darkluplite-element darkluplite--text">Public Code Repositories</strong></h2>
<p>Wizzdi Cloud supports the integration of code dependencies from repositories like Maven Central. This allows developers to easily incorporate existing libraries and frameworks into their Apps, leveraging a vast ecosystem of pre-built code. Furthermore, business flows within Wizzdi can include <em class="wpc--darkluplite-element darkluplite--text">Call Method</em> Activities, which enable Apps to call services or methods from these referenced libraries.</p>
<p>Code added to the app&#8217;s dependencies doesn&#8217;t have to conform to any Wizzdi-dictated structure or interface; you can call any public method of a depend-on library, passing any required parameters to it.</p>
<p class="wpc--darkluplite-element darkluplite--text">In summary, reusability in Wizzdi Cloud is achieved through the ability to publish, clone, and import Apps via marketplaces and integrate external code dependencies and service calls. This approach streamlines the app development process and fosters a collaborative environment where resources and expertise are shared across the Wizzdi community.</p>
<h2><strong class="wpc--darkluplite-element darkluplite--text">Wizzdi Public Marketplace</strong></h2>
<p>The Wizzdi public marketplace functions similarly, enabling users to access a wide range of Apps developed by others. This marketplace acts as a central hub where users can find Apps that suit their needs, contributing to the culture of reusability and collaboration.</p>
<p>Any user of Wizzdi Cloud can now publish, clone, and import apps from the public marketplace.</p>
<h2>Private Marketplaces</h2>
<p>Users can create unlimited private marketplaces and completely control other users&#8217; access. These marketplaces appear as Workspaces in the workspace list.</p>
<h1>How To</h1>
<h2 class="wpc--darkluplite-element darkluplite--text">Reuse an App</h2>
<p class="wpc--darkluplite-element darkluplite--text">To reuse an existing app, it must be published in a private or a public marketplace.</p>
<h3>Commit First</h3>
<p>First, an app must be committed to be published. More information about how to <a href="https://wizzdi.com/docs/documentation/git/#11-toc-title">Commit</a> is available here.</p>
<p>To check if an application has been committed if an app has been committed, it should appear in the app overview with <em>install </em>or <em>uninstall</em>.</p>
<p>&nbsp;</p>
<figure id="attachment_1964" aria-describedby="caption-attachment-1964" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1964" src="https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing-1024x460.jpg" alt="" width="750" height="337" srcset="https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing-1024x460.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing-300x135.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing-768x345.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing-1536x691.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/ready-for-publishing.jpg 1906w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1964" class="wp-caption-text">App Overview</figcaption></figure>
<p>If an app was also deployed to the Wizzdi Cloud customer cluster, the label marked with [1] above may be changed to <em>uninstall</em>.</p>
<p>Once a change is applied to an App, the label designated [1] changes again to commit.</p>
<h3>Publish</h3>
<p>To Publish an App to A Market Place, click the <em>Publish to Marketplace </em>button [2].</p>
<h4>Create a new Marketplace</h4>
<p>If you have not yet created a marketplace, exit your app, go to the first screen, select <em>My Marketplaces </em>[3], then hit [4] and provide the marketplace with a name [5].</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1967 size-large" src="https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1-1024x455.jpg" alt="" width="800" height="355" srcset="https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1-1024x455.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1-300x133.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1-768x341.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1-1536x683.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/new-marketplace-1.jpg 1919w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<figure id="attachment_1968" aria-describedby="caption-attachment-1968" style="width: 350px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1968" src="https://wizzdi.com/wp-content/uploads/2024/04/new-ma.jpg" alt="" width="350" height="233" srcset="https://wizzdi.com/wp-content/uploads/2024/04/new-ma.jpg 422w, https://wizzdi.com/wp-content/uploads/2024/04/new-ma-300x200.jpg 300w" sizes="(max-width: 350px) 100vw, 350px" /><figcaption id="caption-attachment-1968" class="wp-caption-text">Naming a new Marketplace</figcaption></figure>
<p><strong>Note: </strong>Creating a new marketplace takes time; please be patient.</p>
<p>Once the marketplace has been created, it can be found in the list of workspaces. New apps cannot be created in this marketplace.</p>
<p><strong>Note:</strong> A new marketplace can only be shown after sign-out and sign-in again. This is a limitation in the current Wizzdi Cloud version.</p>
<p>Once you see the marketplace in your list of workspaces, you can <a href="https://wizzdi.com/docs/documentation/workspaces/#6-toc-title">invite users</a> to use the Apps in the marketplace.</p>
<h4>Publish into an existing marketplace</h4>
<p>From the overview screen, select publish to the marketplace [2 in <em>the App overview </em>picture above].</p>
<p>The dialog below appears:</p>
<figure id="attachment_1971" aria-describedby="caption-attachment-1971" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1971" src="https://wizzdi.com/wp-content/uploads/2024/04/publish-now.jpg" alt="" width="750" height="853" srcset="https://wizzdi.com/wp-content/uploads/2024/04/publish-now.jpg 592w, https://wizzdi.com/wp-content/uploads/2024/04/publish-now-264x300.jpg 264w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1971" class="wp-caption-text">Publish to a marketplace</figcaption></figure>
<p>Details about the published App appear [7] , including its name, runtime type, and current <strong>uncommitted</strong> version [6].</p>
<p>Select an existing marketplace [8] and one of the committed versions of the App[9]. Click on <em>Publish now </em>[10].</p>
<p>Once publishing is completed, a toast is presented for a few seconds.</p>
<p>Go to <em>my marketplaces </em>and click on view of the marketplace selected for <a href="https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/#12-toc-title">publishing.</a></p>
<p>Click on view to see all published apps in this marketplace.</p>
<h3>Import</h3>
<p>On the same marketplace view, search and select the published app and click on details [12] to access more actions; you can see the dialog below with the marketplace on top [11]</p>
<figure id="attachment_1973" aria-describedby="caption-attachment-1973" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1973" src="https://wizzdi.com/wp-content/uploads/2024/04/view-market-places-1024x548.jpg" alt="" width="750" height="402" srcset="https://wizzdi.com/wp-content/uploads/2024/04/view-market-places-1024x548.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/view-market-places-300x161.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/view-market-places-768x411.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/view-market-places.jpg 1124w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1973" class="wp-caption-text">View the app in the marketplace.</figcaption></figure>
<p>The following screen is displayed once the details button is clicked [12 above].</p>
<figure id="attachment_1974" aria-describedby="caption-attachment-1974" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1974" src="https://wizzdi.com/wp-content/uploads/2024/04/details-1-1024x459.jpg" alt="" width="750" height="337" srcset="https://wizzdi.com/wp-content/uploads/2024/04/details-1-1024x459.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/details-1-300x135.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/details-1-768x345.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/details-1-1536x689.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/details-1.jpg 1890w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1974" class="wp-caption-text">The published app details</figcaption></figure>
<ul>
<li>The name of the published app is displayed [13]</li>
<li>Additional information on the marketplace is displayed [14], and on the version and publishing timestamp [19]</li>
<li>Data visualization of the published app statistics is provided [15].</li>
<li>A full App menu is available; you can view the app components before using them. A published app cannot be changed, even if you are the publisher.</li>
<li>The Clone [17] and Import [18] appear on the top left part of the dialog.</li>
</ul>
<p>To import, click on import. The dialog below appears:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1977" src="https://wizzdi.com/wp-content/uploads/2024/04/import-to-1.jpg" alt="" width="750" height="528" srcset="https://wizzdi.com/wp-content/uploads/2024/04/import-to-1.jpg 612w, https://wizzdi.com/wp-content/uploads/2024/04/import-to-1-300x211.jpg 300w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<ul>
<li class="wpc--darkluplite-element">Select the published App version to import [20].</li>
<li>Select the target workspace [21].</li>
<li>Select the target App [22]; importing is always into an existing app.</li>
</ul><p>The post <a href="https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/">Reusability in Wizzdi Cloud</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/documentation/reusability-in-wizzdi-cloud/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Workspaces</title>
		<link>https://wizzdi.com/docs/documentation/workspaces/</link>
					<comments>https://wizzdi.com/docs/documentation/workspaces/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 18:33:41 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1745</guid>

					<description><![CDATA[<p>Introduction In Wizzdi Cloud, “Workspaces” are a key organizational feature. Think of a workspace as a virtual room or office space on the cloud where you can gather different applications that serve a common purpose or are used by a specific team. This arrangement helps keep related apps together, making them easier to manage and [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/documentation/workspaces/">Workspaces</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1 class="wpc--darkluplite-element darkluplite--text">Introduction</h1>
<p class="wpc--darkluplite-element darkluplite--text">In Wizzdi Cloud, “Workspaces” are a key organizational feature. Think of a workspace as a virtual room or office space on the cloud where you can gather different applications that serve a common purpose or are used by a specific team. This arrangement helps keep related apps together, making them easier to manage and access.</p>
<p class="wpc--darkluplite-element darkluplite--text">The workspace concept is very beneficial for teamwork and collaboration. You can invite others, such as team members, clients, or stakeholders, to work together within a Workspace. Each person you invite can access the apps within that Workspace.</p>
<p class="wpc--darkluplite-element darkluplite--text">A critical aspect of this system is controlling who gets to see or do what within the Workspace. This is managed through “access rights” or permissions. For instance, you might allow team members to edit and update Apps while clients can only view the information. This ensures that sensitive data or functionalities are only accessible to those who need them, maintaining security and efficiency in collaboration.</p>
<p class="wpc--darkluplite-element darkluplite--text">In summary, Workspaces in Wizzdi Cloud help organize your applications, foster collaboration among different users, and provide a controlled environment where access rights ensure security and proper management of resource</p>
<h1 class="wpc--darkluplite-element darkluplite--text">Default workspace</h1>
<p class="wpc--darkluplite-element darkluplite--text">The first workspace is created when you sign up for Wizzdi Cloud. Once you are signed in, you can see this workspace here:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2599" src="https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1.jpg" alt="" width="750" height="205" srcset="https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1.jpg 1913w, https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1-300x82.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1-1024x279.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1-768x210.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/default-one-1-1-1536x419.jpg 1536w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<figure id="attachment_3010" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3010"><figcaption id="caption-attachment-3010" class="wp-caption-text wpc--darkluplite-element darkluplite--text"></figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">Every new app you create is placed in the current workspace; if you have not created new workspaces, they will be in the first workspace created for you.</p>
<h1>Creation</h1>
<p><img loading="lazy" decoding="async" class="wp-image-2600 aligncenter" src="https://wizzdi.com/wp-content/uploads/2024/04/create-2-2.jpg" alt="" width="750" height="756" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-2-2.jpg 832w, https://wizzdi.com/wp-content/uploads/2024/04/create-2-2-297x300.jpg 297w, https://wizzdi.com/wp-content/uploads/2024/04/create-2-2-150x150.jpg 150w, https://wizzdi.com/wp-content/uploads/2024/04/create-2-2-768x774.jpg 768w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<figure id="attachment_3011" class="wp-caption wpc--darkluplite-element aligncenter" aria-describedby="caption-attachment-3011"><figcaption id="caption-attachment-3011" class="wp-caption-text wpc--darkluplite-element darkluplite--text">To create a new workspace, click on the small arrow to the right of the current workspace name (designated <strong>1 </strong>above) and then click on the + New Workspace button (designated <strong>2 </strong>above). The dialog below is opened.<br />
Add Name and Description.<br />
<img loading="lazy" decoding="async" class="aligncenter wp-image-2601" src="https://wizzdi.com/wp-content/uploads/2024/04/create-2-1-1.jpg" alt="" width="750" height="817" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-2-1-1.jpg 504w, https://wizzdi.com/wp-content/uploads/2024/04/create-2-1-1-275x300.jpg 275w" sizes="(max-width: 750px) 100vw, 750px" /><br />
The creation of a new workspace takes some time.</figcaption></figure>
<h1 class="wpc--darkluplite-element darkluplite--text">Selection</h1>
<figure id="attachment_3015" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3015"><figcaption id="caption-attachment-3015" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Selecting another workspace.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">You can switch to a different workspace by clicking on it, and the small checkmark on the right designates the current workspace.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2604" src="https://wizzdi.com/wp-content/uploads/2024/04/select-another-work-space-1.jpg" alt="" width="750" height="775" srcset="https://wizzdi.com/wp-content/uploads/2024/04/select-another-work-space-1.jpg 825w, https://wizzdi.com/wp-content/uploads/2024/04/select-another-work-space-1-290x300.jpg 290w, https://wizzdi.com/wp-content/uploads/2024/04/select-another-work-space-1-768x794.jpg 768w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<h1 class="wpc--darkluplite-element darkluplite--text">Management</h1>
<p class="wpc--darkluplite-element darkluplite--text">To manage A workspace, click the ‘manage’ button next to it. You can only manage the current workspace.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2605" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1.jpg" alt="" width="750" height="330" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1.jpg 1910w, https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1-300x132.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1-1024x450.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1-768x338.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/manage-workspace-1-1536x676.jpg 1536w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2606" src="https://wizzdi.com/wp-content/uploads/2024/04/details-3.jpg" alt="" width="750" height="166" srcset="https://wizzdi.com/wp-content/uploads/2024/04/details-3.jpg 1917w, https://wizzdi.com/wp-content/uploads/2024/04/details-3-300x66.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/details-3-1024x226.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/details-3-768x170.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/details-3-1536x340.jpg 1536w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p>Legend</p>
<ol>
<li>Edit the name and the description of the workspace</li>
<li>Return to overview; &#8216;edit-details&#8217; becomes available.</li>
<li>Manage users.</li>
<li>Manage User groups.</li>
</ol>
<figure id="attachment_3016" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3016"></figure>
<h2>Edit Workspace Details</h2>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-2608" src="https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2.jpg" alt="" width="750" height="224" srcset="https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2.jpg 1915w, https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2-300x90.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2-1024x306.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2-768x230.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/edit-details-2-1536x460.jpg 1536w" sizes="(max-width: 750px) 100vw, 750px" /></p>
<p>Edit Workspace name and description</p>
<figure id="attachment_3019" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3019"></figure>
<h2 class="wpc--darkluplite-element">Manage users</h2>
<p>&nbsp;</p>
<figure id="attachment_1830" aria-describedby="caption-attachment-1830" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1830" src="https://wizzdi.com/wp-content/uploads/2024/04/users-1024x453.jpg" alt="" width="750" height="332" srcset="https://wizzdi.com/wp-content/uploads/2024/04/users-1024x453.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/users-300x133.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/users-768x340.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/users-1536x680.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/users.jpg 1909w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1830" class="wp-caption-text">Workspace Users</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">When inside the workspace management, click ‘users’ to see a list of the workspace users. You can use the search area to search for a user by name.</p>
<h3 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Add a user</strong></h3>
<p class="wpc--darkluplite-element darkluplite--text">Adding users is carried out by inviting them.</p>
<p class="wpc--darkluplite-element darkluplite--text">Click ‘Invite user’ to open the invitation dialog.</p>
<figure id="attachment_1831" aria-describedby="caption-attachment-1831" style="width: 350px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1831" src="https://wizzdi.com/wp-content/uploads/2024/04/invite-user.jpg" alt="" width="350" height="457" srcset="https://wizzdi.com/wp-content/uploads/2024/04/invite-user.jpg 478w, https://wizzdi.com/wp-content/uploads/2024/04/invite-user-230x300.jpg 230w" sizes="(max-width: 350px) 100vw, 350px" /><figcaption id="caption-attachment-1831" class="wp-caption-text">Invite User to a Workspace</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">While inviting the user, click on the ‘+’ sign at the right of a user group to add the user to that group.</p>
<p class="wpc--darkluplite-element darkluplite--text">The invited user receives an email in the following format:</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-1832" src="https://wizzdi.com/wp-content/uploads/2024/04/invitation-email.jpg" alt="" width="350" height="418" srcset="https://wizzdi.com/wp-content/uploads/2024/04/invitation-email.jpg 599w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-email-251x300.jpg 251w" sizes="(max-width: 350px) 100vw, 350px" /></p>
<figure id="attachment_3025" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3025"><figcaption id="caption-attachment-3025" class="wp-caption-text wpc--darkluplite-element darkluplite--text"></figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">If the user has never signed in to Wizzdi Cloud, he or she can do it once the invitation is accepted, using the same email used to invite them.</p>
<p class="wpc--darkluplite-element darkluplite--text">Once logged in, they should see the following dialog inside Wizzdi Cloud.</p>
<figure id="attachment_3026" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3026"><figcaption id="caption-attachment-3026" class="wp-caption-text wpc--darkluplite-element darkluplite--text"><img loading="lazy" decoding="async" class="aligncenter wp-image-1834" src="https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1-1024x336.jpg" alt="" width="750" height="246" srcset="https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1-1024x336.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1-300x98.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1-768x252.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1-1536x503.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloud-1.jpg 1910w" sizes="(max-width: 750px) 100vw, 750px" /></figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">Once the invitee accepts the invitation, the workspace is listed inside the invitee’s own workspaces list.</p>
<figure id="attachment_1839" aria-describedby="caption-attachment-1839" style="width: 750px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-1839" src="https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted-1024x544.jpg" alt="" width="750" height="398" srcset="https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted-1024x544.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted-300x159.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted-768x408.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted-1536x816.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/invitation-in-Wizzdi-Cloudaccepted.jpg 1920w" sizes="(max-width: 750px) 100vw, 750px" /><figcaption id="caption-attachment-1839" class="wp-caption-text">New workspace inside the invitee list</figcaption></figure>
<figure id="attachment_3028" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3028"><figcaption id="caption-attachment-3028" class="wp-caption-text wpc--darkluplite-element darkluplite--text"></figcaption></figure>
<h2 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">User groups</strong></h2>
<p class="wpc--darkluplite-element darkluplite--text">By default, each Workspace has three built-in groups.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Viewers, administrators, editors.</strong></p><p>The post <a href="https://wizzdi.com/docs/documentation/workspaces/">Workspaces</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/documentation/workspaces/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Security</title>
		<link>https://wizzdi.com/docs/documentation/security/</link>
					<comments>https://wizzdi.com/docs/documentation/security/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Thu, 18 Apr 2024 18:33:15 +0000</pubDate>
				<guid isPermaLink="false">https://wizzdi.com/?post_type=docs&#038;p=1743</guid>

					<description><![CDATA[<p>SSO (Single Sign On) OAuth 2.0 The app you build in Wizzdi Cloud may allow the deployed app’s users to sign up using their account for other services such as Google or Apple. Supported OAuth 2.0 providers Google Apple Facebook LinkedIn Github Custom Set OAuth 2.0 support in the Google Cloud Console The following section [&#8230;]</p>
<p>The post <a href="https://wizzdi.com/docs/documentation/security/">Security</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></description>
										<content:encoded><![CDATA[<h3 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">SSO (Single Sign On)</strong></h3>
<p id="1.-obtain-oauth-2.0-credentials-from-the-dynamic_data.setvar.console_name-." class="wpc--darkluplite-element" tabindex="-1" role="presentation" data-text="1. Obtain OAuth 2.0 credentials from the Google API Console."><strong class="wpc--darkluplite-element"><span class="devsite-heading wpc--darkluplite-element darkluplite--text" role="heading" aria-level="3">OAuth 2.<wbr class="wpc--darkluplite-element" />0</span></strong></p>
<p class="wpc--darkluplite-element darkluplite--text">The app you build in Wizzdi Cloud may allow the deployed app’s users to sign up using their account for other services such as Google or Apple.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Supported OAuth 2.0 providers</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Google</li>
<li class="wpc--darkluplite-element darkluplite--text">Apple</li>
<li class="wpc--darkluplite-element darkluplite--text">Facebook</li>
<li class="wpc--darkluplite-element darkluplite--text">LinkedIn</li>
<li class="wpc--darkluplite-element darkluplite--text">Github</li>
<li class="wpc--darkluplite-element darkluplite--text">Custom</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Set OAuth 2.0 support in the Google Cloud Console</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">The following section depicts SSO settings for Google accounts. Other SSO providers are not detailed here. More information is available in their respective guides.</p>
<p class="wpc--darkluplite-element darkluplite--text">Setting up a client on Google OAuth 2.0 when the service is a server (where a secret is required) involves several steps. Here’s a general outline of the process for Google OAuth 2.0 using Google tools.</p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Note</strong>: The following is executed outside Wizzdi Cloud.</p>
<p class="wpc--darkluplite-element darkluplite--text">For a backend created with Wizzdi Cloud to support Google SSO sign-up, the build backend, that is, the App must register with Google services.</p>
<ol class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Google Cloud Console</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Go to the <a class="darkluplite--link" href="https://console.cloud.google.com/">Google Cloud Console.</a></li>
<li class="wpc--darkluplite-element darkluplite--text">Create a new project or select an existing one.</li>
</ul>
</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Enable APIs</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">In your project dashboard, navigate to the “APIs &amp; Services” &gt; “Dashboard” section.</li>
<li class="wpc--darkluplite-element darkluplite--text">Click on “+ ENABLE APIS AND SERVICES” to enable the necessary APIs for your application (e.g., Google Drive API, Google Sheets API, etc.).</li>
</ul>
</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Create Credentials</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Go to the “Credentials” page.</li>
<li class="wpc--darkluplite-element darkluplite--text">Click on “Create credentials” and select “OAuth client ID”.</li>
</ul>
</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Configure OAuth consent screen</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Before creating credentials, you need to configure the OAuth consent screen.</li>
<li class="wpc--darkluplite-element darkluplite--text">Provide the necessary information like the application name, user support email, and developer contact information.</li>
</ul>
</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Creating OAuth Client ID</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Choose the application type (e.g., Web application, Android, iOS, etc.).</li>
<li class="wpc--darkluplite-element darkluplite--text">Set up the name for the OAuth 2.0 client.</li>
<li class="wpc--darkluplite-element darkluplite--text">Specify the authorized JavaScript origins and redirect URIs for web applications.</li>
</ul>
</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Obtain Client ID and Client Secret</strong>:
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Once the OAuth client is created, you will receive a client ID and client secret. These will be used in the App.</li>
<li class="wpc--darkluplite-element darkluplite--text">These are important and should be kept secure and confidential.</li>
</ul>
</li>
</ol>
<p class="wpc--darkluplite-element darkluplite--text">For the specific URLs to set up OAuth clients on other platforms like Facebook, GitHub, Apple, and LinkedIn, you can refer to their respective developer documentation:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Google</strong>: <a class="darkluplite--link" target="_new" rel="noopener">Google Cloud Console</a></li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Facebook</strong>: <a class="darkluplite--link" target="_new" rel="noopener">Facebook for Developers</a></li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">GitHub</strong>: <a class="darkluplite--link" target="_new" rel="noopener">GitHub Developer Settings</a></li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Apple</strong>: <a class="darkluplite--link" href="https://developer.apple.com/" target="_new" rel="noopener">Apple Developer Program</a></li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">LinkedIn</strong>: <a class="darkluplite--link" target="_new" rel="noopener">LinkedIn Developer Portal</a></li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Setting up an SSO provider in your app</strong></p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2574" src="https://wizzdi.com/wp-content/uploads/2024/04/security-1.jpg" alt="" width="1909" height="832" srcset="https://wizzdi.com/wp-content/uploads/2024/04/security-1.jpg 1909w, https://wizzdi.com/wp-content/uploads/2024/04/security-1-300x131.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/security-1-1024x446.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/security-1-768x335.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/security-1-1536x669.jpg 1536w" sizes="(max-width: 1909px) 100vw, 1909px" /></p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Create SSO provider</strong></p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2578" src="https://wizzdi.com/wp-content/uploads/2024/04/permissions.jpg" alt="" width="1914" height="809" srcset="https://wizzdi.com/wp-content/uploads/2024/04/permissions.jpg 1914w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-300x127.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1024x433.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-768x325.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1536x649.jpg 1536w" sizes="(max-width: 1914px) 100vw, 1914px" /></p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Select SSO Provider</strong></p>
<figure id="attachment_3000" class="wp-caption wpc--darkluplite-element aligncenter" aria-describedby="caption-attachment-3000"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2580" src="https://wizzdi.com/wp-content/uploads/2024/04/sso-provider.jpg" alt="" width="397" height="440" srcset="https://wizzdi.com/wp-content/uploads/2024/04/sso-provider.jpg 397w, https://wizzdi.com/wp-content/uploads/2024/04/sso-provider-271x300.jpg 271w" sizes="(max-width: 397px) 100vw, 397px" /></figure>
<p>Select SSO provider</p>
<p class="wpc--darkluplite-element darkluplite--text">Select one of the available providers.</p>
<figure id="attachment_3001" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3001"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2582" src="https://wizzdi.com/wp-content/uploads/2024/04/google-selected.jpg" alt="" width="400" height="433" srcset="https://wizzdi.com/wp-content/uploads/2024/04/google-selected.jpg 400w, https://wizzdi.com/wp-content/uploads/2024/04/google-selected-277x300.jpg 277w" sizes="(max-width: 400px) 100vw, 400px" /><figcaption id="caption-attachment-3001" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Google Selected</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">You may repeat the process and support multiple providers on your backend.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Fill in the OAuth2.0 fields:</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">Open the provider for edit:</p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2584" src="https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso.jpg" alt="" width="1583" height="262" srcset="https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso.jpg 1583w, https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso-300x50.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso-1024x169.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso-768x127.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/edit-button-for-sso-1536x254.jpg 1536w" sizes="(max-width: 1583px) 100vw, 1583px" /></p>
<p class="wpc--darkluplite-element darkluplite--text">Fill in the data obtained from the provider management console in the <em class="wpc--darkluplite-element darkluplite--text">Client ID </em>and <em class="wpc--darkluplite-element darkluplite--text">Secret </em>fields.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Scopes</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">In OAuth 2.0, scopes are permissions that define the access level your application has to a user’s data. By specifying scopes, you request authorization to interact with specific types of user information, such as emails or calendars. These scopes are provided as comma-separated values during the authentication process, dictating what data your application can retrieve or actions it can perform on behalf of the user.</p>
<p class="wpc--darkluplite-element darkluplite--text">Add comma-separated <em class="wpc--darkluplite-element darkluplite--text">Scope</em> values. In Google OAuth 2.0, these can be any of the scopes <a class="darkluplite--link" href="https://developers.google.com/identity/protocols/oauth2/scopes#oauth2">here.</a></p>
<p class="wpc--darkluplite-element darkluplite--text">For example, if you want to use the user’s email in the App to send emails to the user through SendGrid-consumed API support, you will add <em class="wpc--darkluplite-element darkluplite--text">email</em> to Google SSO scopes.</p>
<p class="wpc--darkluplite-element darkluplite--text">For other <em class="wpc--darkluplite-element darkluplite--text">SSO </em> providers, use the respective documentation to get the scope list they support.</p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2588" src="https://wizzdi.com/wp-content/uploads/2024/04/edit-sso-fields.jpg" alt="" width="1504" height="484" srcset="https://wizzdi.com/wp-content/uploads/2024/04/edit-sso-fields.jpg 1504w, https://wizzdi.com/wp-content/uploads/2024/04/edit-sso-fields-300x97.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/edit-sso-fields-1024x330.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/edit-sso-fields-768x247.jpg 768w" sizes="(max-width: 1504px) 100vw, 1504px" /></p>
<p class="wpc--darkluplite-element darkluplite--text">Use the values obtained from the Auth 2.0 provider for <em class="wpc--darkluplite-element darkluplite--text">Client ID </em>and <em class="wpc--darkluplite-element darkluplite--text">Client Secret, </em>and add comma-separated scopes to the <em class="wpc--darkluplite-element darkluplite--text">Scopes </em>field.</p>
<h4 class="wpc--darkluplite-element darkluplite--text">SSO In Deployment</h4>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">SSO providers’ usage at deployment.</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">Regardless of where the App is deployed, the client-side user interface should provide the required access buttons for each OAuth 2.0 provider.<img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2589" src="https://wizzdi.com/wp-content/uploads/2024/04/ui-examples.jpg" alt="" width="197" height="105" />When building the client user interface without using Wizzdi Cloud User Interface builder, The URL associated with such a button should be constructed as follows:</p>
<p class="wpc--darkluplite-element"><em class="wpc--darkluplite-element darkluplite--text">https://[server URL] oauth2/authorization/[provider name].</em></p>
<p class="wpc--darkluplite-element darkluplite--text">where the provider names are Google, Apple, GitHub, LinkedIn, or Facebook. A single one should be selected.</p>
<p class="wpc--darkluplite-element darkluplite--text">If the App was deployed on Wizdi Customer’s cloud, the URL for Google will be:<br class="wpc--darkluplite-element" /><em class="wpc--darkluplite-element darkluplite--text">https://[app-name].[workspace-name].cluster.wizzdi.com/oauth2/authorization/google</em></p>
<p class="wpc--darkluplite-element darkluplite--text">When deploying on Wizzdi Cloud customers’ cloud, you can copy the Swagger URL from the App overview if it was deployed and replace the suffix as follows:</p>
<p class="wpc--darkluplite-element darkluplite--text">Replace <em class="wpc--darkluplite-element darkluplite--text">swagger-ui.html </em>with <em class="wpc--darkluplite-element darkluplite--text"> oauth2/authorization/google </em><br class="wpc--darkluplite-element" /><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2590" src="https://wizzdi.com/wp-content/uploads/2024/04/swagger-url-1.jpg" alt="" width="794" height="103" srcset="https://wizzdi.com/wp-content/uploads/2024/04/swagger-url-1.jpg 794w, https://wizzdi.com/wp-content/uploads/2024/04/swagger-url-1-300x39.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/swagger-url-1-768x100.jpg 768w" sizes="(max-width: 794px) 100vw, 794px" /></p>
<p class="wpc--darkluplite-element darkluplite--text">Once this URL is activated, the process is pretty automatic; if this is the first time this provider is used, the user is prompted to approve access to Wizzdi Cloud, and subsequent accesses are transparent.</p>
<p class="wpc--darkluplite-element darkluplite--text">Note that switching among providers, for example, between Google and Apple, is equivalent to having two different users. Likewise, Do not use any of your emails for standard email password sign-up if this email is associated with any SSO provider.</p>
<h3 class="wpc--darkluplite-element darkluplite--text">Permissions</h3>
<p class="wpc--darkluplite-element darkluplite--text">Wizzdi Cloud supports defining <em class="wpc--darkluplite-element darkluplite--text">role</em> <em class="wpc--darkluplite-element darkluplite--text">configurations</em> inside <em class="wpc--darkluplite-element darkluplite--text">permission configurations</em> on all three current runtimes (<em class="wpc--darkluplite-element darkluplite--text">Spring, Flexicore, Flexiocore Boot)</em>. This provides Role-based access control to API endpoints.</p>
<p class="wpc--darkluplite-element darkluplite--text">In addition, the FlexiCore and Flexicore Boot runtimes have a robust security framework emphasizing multi-tenancy and role-based access control (RBAC) for API endpoints and data objects. This security framework is crucial for applications that require stringent data isolation and access control mechanisms, especially in environments serving multiple user groups or tenants. Here’s an expanded view of how this is implemented and managed:</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Tenant and Role-Based Access Control</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Tenant Support</strong>: Multi-tenancy is a software architecture principle in which a single instance of the software serves multiple customers or tenants. FlexiCore achieves this through predefined database objects that segregate data by the tenant. This ensures that data is isolated between tenants and that access controls can be enforced at the <em class="wpc--darkluplite-element darkluplite--text">tenant</em> level.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Role-Based Access Control (RBAC)</strong>: RBAC is a method of restricting system access to authorized users. In FlexiCore, roles are defined to define permissions or access rights. These roles are then assigned to users within a tenant, determining what actions they can perform and what data they can access within the system.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Predefined Database Objects</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">At the initialization of a backend built by Wizzdi Cloud and using any of the two FlexiCore runtimes, a set of predefined database objects related to security (like roles, permissions, and tenant information) are optionally created if so defined in Wizzdi Cloud while developing the App. These objects serve as the foundational elements of the security model, ensuring that the application starts with a basic level of access control and data isolation. For <em class="wpc--darkluplite-element darkluplite--text">Spring</em> runtime, defined roles and access to API endpoints affect the generated code.</li>
</ul>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">API Endpoints for Security Management</strong>:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">FlexiCore provides multiple API endpoints dedicated to managing these security-related database objects. Administrators can dynamically modify and expand the roles, permissions, and tenant configurations when the app is deployed through these endpoints as the application evolves. This allows for a flexible and responsive security model that can adapt to new requirements or changes in the operational environment.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Web-Based User Interface for Security Objects.</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">When deploying a FelxiCore-based backend, an optional user interface can be added, providing an easy-to-use security objects management console. This user interface makes use of the security-related API endpoints.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Adding and managing permissions</strong></p>
<figure id="attachment_3501" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3501"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2591" src="https://wizzdi.com/wp-content/uploads/2024/04/permissions-1.jpg" alt="" width="1914" height="809" srcset="https://wizzdi.com/wp-content/uploads/2024/04/permissions-1.jpg 1914w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-300x127.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-1024x433.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-768x325.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-1536x649.jpg 1536w" sizes="(max-width: 1914px) 100vw, 1914px" /></figure>
<p class="wpc--darkluplite-element">Accessing permissions</p>
<p class="wpc--darkluplite-element darkluplite--text">The Wizzdi Cloud user interface’s<em class="wpc--darkluplite-element darkluplite--text"> Permissions</em> menu option is the entry point for configuring and managing these foundational security objects.</p>
<figure id="attachment_3183" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3183"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2592" src="https://wizzdi.com/wp-content/uploads/2024/04/add-permission-cnfig.jpg" alt="" width="653" height="424" srcset="https://wizzdi.com/wp-content/uploads/2024/04/add-permission-cnfig.jpg 653w, https://wizzdi.com/wp-content/uploads/2024/04/add-permission-cnfig-300x195.jpg 300w" sizes="(max-width: 653px) 100vw, 653px" /></figure>
<p class="wpc--darkluplite-element">The <em class="wpc--darkluplite-element darkluplite--text">Permission Configuration</em> fields.</p>
<h4 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Permission Configuration</strong></h4>
<p class="wpc--darkluplite-element darkluplite--text">In the context of Wizzdi Cloud, permission configuration is a critical aspect that dictates access to various components, such as API endpoints and data. This configuration process differs between Spring and FlexiCore runtimes.</p>
<p class="wpc--darkluplite-element darkluplite--text">In <em class="wpc--darkluplite-element darkluplite--text">Spring Boot</em> runtime:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Permission Configurations</em> are more integrated with the codebase itself. The configurations directly influence the code that is created and executed.</li>
<li class="wpc--darkluplite-element darkluplite--text">There is no API at runtime to manage <em class="wpc--darkluplite-element darkluplite--text">Roles</em> and permissions.</li>
<li class="wpc--darkluplite-element darkluplite--text">This implies that changes in permission configurations necessitate modifications in Wizzdi Cloud, committing and deploying the App again.</li>
</ul>
<p class="wpc--darkluplite-element darkluplite--text">In <em class="wpc--darkluplite-element darkluplite--text">FlexiCore</em>, both runtimes:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Permission configurations define access at two levels: <em class="wpc--darkluplite-element darkluplite--text">operations</em> (API endpoints) and data.</li>
<li class="wpc--darkluplite-element darkluplite--text">Once the server starts running, any missing configured permissions are instantiated within the database, making them active and enforceable.</li>
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">FlexiCore</em> also provides  API endpoints specifically for managing these permissions. This API allows permissions to be created, modified, or deleted, allowing for dynamic control over access to data and operations.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text"> <em class="wpc--darkluplite-element darkluplite--text">Permission Configuration </em> options</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Tenant</em> <em class="wpc--darkluplite-element darkluplite--text">Configurations</em> (<strong class="wpc--darkluplite-element darkluplite--text">Flexicore runtimes Only</strong>) create predefined and missing <em class="wpc--darkluplite-element darkluplite--text">Tenants</em> when the App is deployed.</li>
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Role</em> <em class="wpc--darkluplite-element darkluplite--text">Configurations</em> create predefined and missing <em class="wpc--darkluplite-element darkluplite--text">Roles</em> when the App is deployed.<br class="wpc--darkluplite-element" /><em class="wpc--darkluplite-element darkluplite--text">Roles</em> are always defined per <i class="wpc--darkluplite-element darkluplite--text">tenant </i>and present in the database.<br class="wpc--darkluplite-element" />With <em class="wpc--darkluplite-element darkluplite--text">Spring Boot </em>runtime, as there is no multi-tenancy support, <i class="wpc--darkluplite-element darkluplite--text">roles are app-wide and </i>present in the generated code, not in the database.</li>
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Permissions on API endpoints</em>: Access control for each endpoint is delineated by the <em class="wpc--darkluplite-element darkluplite--text">tenant</em> or <em class="wpc--darkluplite-element darkluplite--text">role</em> specifications, encompassing three primary modes: <em class="wpc--darkluplite-element darkluplite--text">Execute Without Security,</em> <em class="wpc--darkluplite-element darkluplite--text">Anonymous Execution,</em> and <em class="wpc--darkluplite-element darkluplite--text">Secured Access</em>. The latter, serving as the default mode, permits all authenticated users endpoint access, barring the existence of explicit Permission Configuration.<br class="wpc--darkluplite-element" />Within a <i class="wpc--darkluplite-element darkluplite--text">Spring framework, </i>such configurations may specify one or multiple roles authorized for endpoint access, denying access to users not associated with these roles.<br class="wpc--darkluplite-element" />In Flexicore runtimes, access control mechanisms are augmented by providing default Tenant behavior and dynamic management through a security API at runtime. This default Tenant behavior introduces tenant-specific access control policies, which are subject to being overridden by role-based permissions.<br class="wpc--darkluplite-element" />In Flexicore run times, as with all other permissions configurations, API access is stored in the database and can be modified on a deployed App through the provided APIs or permission management app.</li>
</ul>
<div class="flex-1 overflow-hidden wpc--darkluplite-element">
<div class="react-scroll-to-bottom--css-cvlsm-79elbk h-full wpc--darkluplite-element">
<div class="react-scroll-to-bottom--css-cvlsm-1n7m0yu wpc--darkluplite-element">
<div class="flex flex-col pb-9 text-sm wpc--darkluplite-element">
<div class="w-full text-token-text-primary wpc--darkluplite-element" data-testid="conversation-turn-3">
<div class="px-4 py-2 justify-center text-base md:gap-6 m-auto wpc--darkluplite-element">
<div class="flex flex-1 text-base mx-auto gap-3 md:px-5 lg:px-1 xl:px-5 md:max-w-3xl lg:max-w-[40rem] xl:max-w-[48rem] group final-completion wpc--darkluplite-element">
<div class="relative flex w-full flex-col lg:w-[calc(100%-115px)] agent-turn wpc--darkluplite-element">
<div class="flex-col gap-1 md:gap-3 wpc--darkluplite-element">
<div class="flex flex-grow flex-col max-w-full wpc--darkluplite-element">
<div class="min-h-[20px] text-message flex flex-col items-start gap-3 whitespace-pre-wrap break-words [.text-message+&amp;]:mt-5 overflow-x-auto wpc--darkluplite-element" data-message-author-role="assistant" data-message-id="f36ac053-8ad5-4142-a3ca-ab2f00f5ae48">
<div class="markdown prose w-full break-words dark:prose-invert light wpc--darkluplite-element">
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text">Permissions on Data-Model (<strong class="wpc--darkluplite-element darkluplite--text">Flexicore runtimes only)</strong>: Access definition for Tenants and Roles to <strong class="wpc--darkluplite-element darkluplite--text">all</strong> instances of an Entity; this can be defined in conjunctions with all API endpoints relevant for the entity or just some, for example, <em class="wpc--darkluplite-element darkluplite--text">cannot create</em> but <em class="wpc--darkluplite-element"><em class="wpc--darkluplite-element darkluplite--text">can view.</em></em></li>
<li class="wpc--darkluplite-element darkluplite--text">Exposed <em class="wpc--darkluplite-element darkluplite--text">Flexicore</em> APIs provide finer granularity at run time when access permissions on all instances are not granular enough.<br class="wpc--darkluplite-element" />Wizzdi’s permission web app can also manage access control to data instances at any granularity.</li>
</ul>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Note: </strong><em class="wpc--darkluplite-element darkluplite--text">Flexicore</em> runtimes are based on the Spring Boot framework and provide access to all Spring libraries and services.</p>
<p class="wpc--darkluplite-element">
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<p class="wpc--darkluplite-element darkluplite--text">You may define multiple <em class="wpc--darkluplite-element darkluplite--text">Permission Configurations. </em>The final behavior at runtime is a combination of all configurations. In most cases, a single configuration is sufficient.</p>
<p class="wpc--darkluplite-element darkluplite--text">Once the permission configuration is created, the following view is available.</p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2591" src="https://wizzdi.com/wp-content/uploads/2024/04/permissions-1.jpg" alt="" width="1914" height="809" srcset="https://wizzdi.com/wp-content/uploads/2024/04/permissions-1.jpg 1914w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-300x127.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-1024x433.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-768x325.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-1-1536x649.jpg 1536w" sizes="(max-width: 1914px) 100vw, 1914px" /></p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Tenant Configurations (Flexicore Runtimes only)</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">To create and manage <em class="wpc--darkluplite-element darkluplite--text">Tenant Configurations, </em>click on <em class="wpc--darkluplite-element darkluplite--text">Tenants.</em></p>
<p class="wpc--darkluplite-element"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2593" src="https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1.jpg" alt="" width="1918" height="830" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1.jpg 1918w, https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1-300x130.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1-1024x443.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1-768x332.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-1-1536x665.jpg 1536w" sizes="(max-width: 1918px) 100vw, 1918px" /></p>
<p class="wpc--darkluplite-element darkluplite--text">The above dialog also appears when managing the existing <em class="wpc--darkluplite-element darkluplite--text">Permission Configuration.</em></p>
<figure id="attachment_3193" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3193"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2594" src="https://wizzdi.com/wp-content/uploads/2024/04/create-tenant.jpg" alt="" width="399" height="262" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-tenant.jpg 399w, https://wizzdi.com/wp-content/uploads/2024/04/create-tenant-300x197.jpg 300w" sizes="(max-width: 399px) 100vw, 399px" /></figure>
<p class="wpc--darkluplite-element">Create Tenant configuration.</p>
<p class="wpc--darkluplite-element darkluplite--text">To create a <em class="wpc--darkluplite-element darkluplite--text">Tenant Configuration</em>, add a name. The tenant is created when the App runs on the server.</p>
<figure id="attachment_3195" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3195"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2595" src="https://wizzdi.com/wp-content/uploads/2024/04/Europe-Tenant.jpg" alt="" width="399" height="299" srcset="https://wizzdi.com/wp-content/uploads/2024/04/Europe-Tenant.jpg 399w, https://wizzdi.com/wp-content/uploads/2024/04/Europe-Tenant-300x225.jpg 300w" sizes="(max-width: 399px) 100vw, 399px" /></figure>
<p>Europe Tenant</p>
<p class="wpc--darkluplite-element darkluplite--text">The view of <em class="wpc--darkluplite-element darkluplite--text">Tenant Configurations </em>is similar to this one:</p>
<figure id="attachment_3197" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3197"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2596" src="https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1.jpg" alt="" width="1907" height="858" srcset="https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1.jpg 1907w, https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1-300x135.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1-1024x461.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1-768x346.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/tenant-created-1-1536x691.jpg 1536w" sizes="(max-width: 1907px) 100vw, 1907px" /><figcaption id="caption-attachment-3197" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Tenant Configurations view</figcaption></figure>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Role Configurations (all runtimes)</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">When using Flexicore runtimes, roles and permissions are configured per tenant, allowing tenant administrators to define roles.</p>
<p class="wpc--darkluplite-element darkluplite--text">Role Configurations are created within Tenant Configurations. This setup defines the permissions and access levels assignable to users within a tenant’s domain on Wizzdi Cloud.</p>
<p class="wpc--darkluplite-element darkluplite--text">When FlexiCore runtimes are utilized, role management extends to the server level through API endpoints. This enables the creation or adjustment of roles directly on the application’s target server. The roles available at any given time are predefined through Role Configurations within the Tenant Configurations and those created or modified using the API endpoints. This design allows for managing roles based on immediate needs or changes.</p>
<p class="wpc--darkluplite-element darkluplite--text">When running a Spring runtime, <em class="wpc--darkluplite-element darkluplite--text">Tenants </em>are unsupported, and <em class="wpc--darkluplite-element darkluplite--text">Roles </em>are App-wide.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Create a Role Configuration</strong></p>
<figure id="attachment_3198" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3198"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2597" src="https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty.jpg" alt="" width="1900" height="710" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty.jpg 1900w, https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty-300x112.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty-1024x383.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty-768x287.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/create-role-empty-1536x574.jpg 1536w" sizes="(max-width: 1900px) 100vw, 1900px" /></figure>
<p>Role Configurations, empty view.</p>
<p class="wpc--darkluplite-element darkluplite--text">Filled Role Configuration.</p>
<figure id="attachment_3199" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3199"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2598" src="https://wizzdi.com/wp-content/uploads/2024/04/create-role.jpg" alt="" width="410" height="350" srcset="https://wizzdi.com/wp-content/uploads/2024/04/create-role.jpg 410w, https://wizzdi.com/wp-content/uploads/2024/04/create-role-300x256.jpg 300w" sizes="(max-width: 410px) 100vw, 410px" /><figcaption id="caption-attachment-3199" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Create Role Configuration.</figcaption></figure>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element"></li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Access Rules priority</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">In systems where permission configurations might conflict, the hierarchy prioritizes permissions assigned to a <em class="wpc--darkluplite-element darkluplite--text">Role</em> over those set at the <em class="wpc--darkluplite-element darkluplite--text">Tenant</em> level, allowing role-specific permissions to override tenant-wide defaults.</p>
<p class="wpc--darkluplite-element darkluplite--text">FlexiCore-runtime-based applications utilize Security API endpoints that allow for precise permission control at the <em class="wpc--darkluplite-element darkluplite--text">AppUser</em> level. This means permissions or denials assigned to an individual user will override those assigned to the Roles and Tenants with which this user is associated.</p>
<p class="wpc--darkluplite-element darkluplite--text">This hierarchical approach to permission control ensures that when conflicts arise, the system resolves them by prioritizing user-specific permissions over role-based permissions and role-based permissions over tenant-wide settings.</p>
<p class="wpc--darkluplite-element darkluplite--text">FlexiCore-based runtimes using the standard API are the only runtimes that can have AppUsers permissions applied at runtime.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Operation Permissions Configuration.</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">This section applies to pure Spring runtime, Flexicore runtime, and Flexicore Boot runtime.</p>
<figure id="attachment_3201" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3201"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2602" src="https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty.jpg" alt="" width="1908" height="719" srcset="https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty.jpg 1908w, https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty-300x113.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty-1024x386.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty-768x289.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/operation-permissions-empty-1536x579.jpg 1536w" sizes="(max-width: 1908px) 100vw, 1908px" /><figcaption id="caption-attachment-3201" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Permission Configurations for Operations (API endpoints).</figcaption></figure>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Create a Permission Configuration for API endpoints (operations).</strong></p>
<figure id="attachment_3202" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3202"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2607" src="https://wizzdi.com/wp-content/uploads/2024/04/permission-configuration-for-operations.-create.jpg" alt="" width="760" height="435" srcset="https://wizzdi.com/wp-content/uploads/2024/04/permission-configuration-for-operations.-create.jpg 760w, https://wizzdi.com/wp-content/uploads/2024/04/permission-configuration-for-operations.-create-300x172.jpg 300w" sizes="(max-width: 760px) 100vw, 760px" /><figcaption id="caption-attachment-3202" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Create a Permission Configuration for Operation.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">When creating a <em class="wpc--darkluplite-element darkluplite--text">permission configuration,</em> we define two components. The permission target includes a list of <em class="wpc--darkluplite-element darkluplite--text">tenants</em> and <em class="wpc--darkluplite-element darkluplite--text">roles</em> associated with one or more operations.</p>
<p class="wpc--darkluplite-element darkluplite--text">When a <em class="wpc--darkluplite-element darkluplite--text">tenant</em> is associated with <em class="wpc--darkluplite-element darkluplite--text">permission</em>, it defines the default behavior for the included operations for that <em class="wpc--darkluplite-element darkluplite--text">tenant</em> on a running system.  <em class="wpc--darkluplite-element darkluplite--text">Tenant</em> administrators may want different system behavior for their users. Some may wish a loose system, while others prefer restricted access by default. When the access is limited at the <em class="wpc--darkluplite-element darkluplite--text">tenant</em> level, associating with <em class="wpc--darkluplite-element darkluplite--text">roles</em> is required to open it for some of the <em class="wpc--darkluplite-element darkluplite--text">tenants</em>‘ users.</p>
<p class="wpc--darkluplite-element darkluplite--text">It should be noted that this flexibility of changes on a running system is available only with Flexicore runtimes. Changing the permissions on a pure Spring runtime requires changing the App in Wizzdi Cloud and redeploying the App.</p>
<figure id="attachment_3203" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3203"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2609" src="https://wizzdi.com/wp-content/uploads/2024/04/selected-targets.jpg" alt="" width="865" height="835" srcset="https://wizzdi.com/wp-content/uploads/2024/04/selected-targets.jpg 865w, https://wizzdi.com/wp-content/uploads/2024/04/selected-targets-300x290.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/selected-targets-768x741.jpg 768w" sizes="(max-width: 865px) 100vw, 865px" /><figcaption id="caption-attachment-3203" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Selected Targets in a Permission Configuration.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">In the above image, the targets selected are one <em class="wpc--darkluplite-element darkluplite--text">Role</em> from a <em class="wpc--darkluplite-element darkluplite--text">Tenant</em> and one <em class="wpc--darkluplite-element darkluplite--text">Tenant</em>, the <em class="wpc--darkluplite-element darkluplite--text">America Tenant.</em></p>
<p class="wpc--darkluplite-element darkluplite--text">The permission pertains to all users of the <em class="wpc--darkluplite-element darkluplite--text">Europe Tenant</em> (marked in blue) and only to the <em class="wpc--darkluplite-element darkluplite--text">Administrator Role (</em>marked in yellow) in the <em class="wpc--darkluplite-element darkluplite--text">America Tenant.</em></p>
<figure id="attachment_3204" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3204"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2611" src="https://wizzdi.com/wp-content/uploads/2024/04/security-select-operation.jpg" alt="" width="560" height="588" srcset="https://wizzdi.com/wp-content/uploads/2024/04/security-select-operation.jpg 560w, https://wizzdi.com/wp-content/uploads/2024/04/security-select-operation-286x300.jpg 286w" sizes="(max-width: 560px) 100vw, 560px" /><figcaption id="caption-attachment-3204" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Select API endpoints for permission configuration.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">In the above image, two endpoints have been selected when selecting an endpoint. Either <em class="wpc--darkluplite-element darkluplite--text">allow </em>or <em class="wpc--darkluplite-element darkluplite--text">deny </em>may be chosen.</p>
<h4 class="wpc--darkluplite-element darkluplite--text">Security On Exposed APIs</h4>
<p class="wpc--darkluplite-element darkluplite--text">Available in all runtimes.</p>
<p class="wpc--darkluplite-element darkluplite--text">The exposed API endpoints have additional settings defining their behavior and the permissions related to them.</p>
<figure id="attachment_3206" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3206"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2612" src="https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1.jpg" alt="" width="1587" height="605" srcset="https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1.jpg 1587w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1-300x114.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1-1024x390.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1-768x293.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/permissions-on-exposed-endpoint-1-1536x586.jpg 1536w" sizes="(max-width: 1587px) 100vw, 1587px" /></figure>
<p>Accessing the security settings on an <em class="wpc--darkluplite-element darkluplite--text">Exposed API endpoint</em>.</p>
<figure id="attachment_3210" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3210"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2613" src="https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint.jpg" alt="" width="384" height="459" srcset="https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint.jpg 384w, https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint-251x300.jpg 251w" sizes="(max-width: 384px) 100vw, 384px" /><figcaption id="caption-attachment-3210" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Select The Target, <em class="wpc--darkluplite-element darkluplite--text">Role</em>, or <em class="wpc--darkluplite-element darkluplite--text">Tenant</em>.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">When setting security directly on the <em class="wpc--darkluplite-element darkluplite--text">Endpoint, </em>The following options are available:</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Execute without Security</em>: At runtime, the user must be signed in to access the endpoint, and no other security restrictions are applied.</li>
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Anonymous Execution:</em> Anyone can execute this endpoint at runtime. For example, a sign-in/sign-up endpoint must be accessible to all.</li>
<li class="wpc--darkluplite-element darkluplite--text"><em class="wpc--darkluplite-element darkluplite--text">Restricted execution: </em>when none of the above two options is selected, the following section applies.</li>
</ul>
<figure id="attachment_3211" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3211"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2613" src="https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint.jpg" alt="" width="384" height="459" srcset="https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint.jpg 384w, https://wizzdi.com/wp-content/uploads/2024/04/settings-on-endpoint-251x300.jpg 251w" sizes="(max-width: 384px) 100vw, 384px" /></figure>
<p>Select Security Options on an API endpoint.</p>
<p class="wpc--darkluplite-element darkluplite--text">When configuring the access to an endpoint, we first need to select Te<em class="wpc--darkluplite-element darkluplite--text">nants </em>or R<em class="wpc--darkluplite-element darkluplite--text">oles. </em></p>
<p class="wpc--darkluplite-element darkluplite--text">Then click on the ‘+’ sign to add a <em class="wpc--darkluplite-element darkluplite--text">Tenant Permission Configuration</em> or a <em class="wpc--darkluplite-element darkluplite--text">Roles Permission Configuration.</em></p>
<figure id="attachment_3209" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3209"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2614" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-3.jpg" alt="" width="402" height="295" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-3.jpg 402w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-3-300x220.jpg 300w" sizes="(max-width: 402px) 100vw, 402px" /><figcaption id="caption-attachment-3209" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Creating or selecting a <em class="wpc--darkluplite-element darkluplite--text">Permission Configuration.</em></figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">When Adding a Role/Tenant Configuration, you can select an existing Permission configuration or create a new one.</p>
<figure id="attachment_3208" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3208"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2615" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-4.jpg" alt="" width="393" height="385" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-4.jpg 393w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-4-300x294.jpg 300w" sizes="(max-width: 393px) 100vw, 393px" /><figcaption id="caption-attachment-3208" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Selecting the Tenant.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">Selecting a <em class="wpc--darkluplite-element darkluplite--text">Tenant Configuration </em>for the endpoint.</p>
<p class="wpc--darkluplite-element darkluplite--text">Adding <i class="wpc--darkluplite-element darkluplite--text">a Role Permission Configuration </i>or <i class="wpc--darkluplite-element darkluplite--text">Tenant Permission Configuration </i>may be repeated. A summary of all such configurations created so far is available.</p>
<figure id="attachment_3213" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3213"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2616" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-summary.jpg" alt="" width="394" height="570" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-summary.jpg 394w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-endpoint-summary-207x300.jpg 207w" sizes="(max-width: 394px) 100vw, 394px" /><figcaption id="caption-attachment-3213" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Tenants/Roles Permission Configurations summary.</figcaption></figure>
<h3 class="wpc--darkluplite-element"><b class="wpc--darkluplite-element darkluplite--text">Permissions on Data</b></h3>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Important Note:</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">Support for data access control in Wizddi Cloud is available for <em class="wpc--darkluplite-element darkluplite--text">FlexiCore</em> and <em class="wpc--darkluplite-element darkluplite--text">FlexiCore Boot</em> runtimes only. Furthermore, all entities <strong class="wpc--darkluplite-element darkluplite--text">must</strong> directly or indirectly extend the Flexicore-defined entity <em class="wpc--darkluplite-element darkluplite--text">SecuredBasic.</em></p>
<p class="wpc--darkluplite-element darkluplite--text">As in this domain model, <em class="wpc--darkluplite-element darkluplite--text">Book </em>and <em class="wpc--darkluplite-element darkluplite--text">Author </em>both extend the <em class="wpc--darkluplite-element darkluplite--text">SecuredBasic </em>entity.</p>
<figure id="attachment_3235" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3235"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2617" src="https://wizzdi.com/wp-content/uploads/2024/04/book-author-model.jpg" alt="" width="665" height="633" srcset="https://wizzdi.com/wp-content/uploads/2024/04/book-author-model.jpg 665w, https://wizzdi.com/wp-content/uploads/2024/04/book-author-model-300x286.jpg 300w" sizes="(max-width: 665px) 100vw, 665px" /></figure>
<p>Entities extend SecuredBasic.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Model-Level Permissions</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Design Phase on Wizzdi Cloud</strong>: Model-level permissions can be established during the application’s design phase. These permissions define access controls for entities within the application’s model, setting broad access rights for Roles or Tenants to <strong class="wpc--darkluplite-element"><em class="wpc--darkluplite-element darkluplite--text">all</em></strong> records of a particular entity.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Runtime</strong>: Model-level permissions can be modified and created at runtime using the provided API.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Instance-Level Permissions</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Runtime only</strong>: Instance-level permissions are specific to the runtime environment and are applied to individual data records within the application. These permissions allow for granular control over access to particular data instances.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Instances Groups: </strong>The run time instance-level access control includes the concept of <em class="wpc--darkluplite-element darkluplite--text">Instance Group,</em> where a heterogenous collection of instances can be subject to permissions as a whole.</li>
<li class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Supported by API endpoints:</strong> Instance-level permission management is available only at runtime using the provided API endpoints and only for <em class="wpc--darkluplite-element darkluplite--text">Flexicore </em>and <em class="wpc--darkluplite-element darkluplite--text">Flexicore Boot.</em></li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Model-level permissions, the details.</strong></p>
<figure id="attachment_3225" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3225"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2618" src="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main.jpg" alt="" width="1912" height="471" srcset="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main.jpg 1912w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main-300x74.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main-1024x252.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main-768x189.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-main-1536x378.jpg 1536w" sizes="(max-width: 1912px) 100vw, 1912px" /></figure>
<p>Data permissions, no permissions yet.</p>
<p class="wpc--darkluplite-element darkluplite--text">Click on Create Data Permissions.</p>
<figure id="attachment_3226" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3226"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2621" src="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-2-768x548-1.jpg" alt="" width="768" height="548" srcset="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-2-768x548-1.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-2-768x548-1-300x214.jpg 300w" sizes="(max-width: 768px) 100vw, 768px" /><figcaption id="caption-attachment-3226" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Create a model-level <em class="wpc--darkluplite-element darkluplite--text">data permission</em>.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">In the above dialog, you must set the Target, a list of Roles and/or Tenants, the Subject, the entities for this permission, and the operation. The API endpoint you want to associate the permission with.</p>
<figure id="attachment_3227" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3227"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2619" src="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-3-768x757-1.jpg" alt="" width="768" height="757" srcset="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-3-768x757-1.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-3-768x757-1-300x296.jpg 300w" sizes="(max-width: 768px) 100vw, 768px" /><figcaption id="caption-attachment-3227" class="wp-caption-text wpc--darkluplite-element darkluplite--text">The Data Permission filled.</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">Multiple targets, Entities, and Operations can be included in a single Data Permission Configuration.</p>
<figure id="attachment_3230" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3230"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2623" src="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-multiple-permisssions.jpg" alt="" width="778" height="854" srcset="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-multiple-permisssions.jpg 778w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-multiple-permisssions-273x300.jpg 273w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-multiple-permisssions-768x843.jpg 768w" sizes="(max-width: 778px) 100vw, 778px" /><figcaption id="caption-attachment-3230" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Multiple Targets, Entities, and Operations in one Permission Configuration</figcaption></figure>
<p class="wpc--darkluplite-element darkluplite--text">In the above screenshot, targets, Tenants, and Roles are marked yellow, Entities from the data model are marked blue, and operations and API endpoints are marked green.</p>
<p class="wpc--darkluplite-element darkluplite--text">When <em class="wpc--darkluplite-element darkluplite--text">Add Permissions </em>is clicked, a list of permissions generated from the above is displayed.</p>
<figure id="attachment_3231" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3231"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2624" src="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created.jpg" alt="" width="1594" height="630" srcset="https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created.jpg 1594w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created-300x119.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created-1024x405.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created-768x304.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/data-permissions-created-1536x607.jpg 1536w" sizes="(max-width: 1594px) 100vw, 1594px" /><figcaption id="caption-attachment-3231" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Partial view of permissions created.</figcaption></figure>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Applying Data Model Security From Domain Model Editor.</strong></p>
<p class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Note: </strong>When an app is developed using Wizzdi Cloud, the structure and properties of its entities (such as data models or object types) are predefined. However, the actual data instances (or records) corresponding to these entities are generated only when the app is deployed and used in a live environment. Consequently, security measures related to the entities can be implemented during the app’s design phase within Wizzdi Cloud.</p>
<p class="wpc--darkluplite-element darkluplite--text">In addition to these design-time security configurations, Flexicore runtimes also support applying dynamic access control measures at runtime through its system APIs. These APIs can be used to apply both Entity-level and instance-level access rules.</p>
<p class="wpc--darkluplite-element darkluplite--text">When an <em class="wpc--darkluplite-element darkluplite--text">Entity </em>is selected in a domain model diagram, and the runtime is one of Flexicore’s runtimes, the ‘<em class="wpc--darkluplite-element darkluplite--text">Manage Security</em>‘ button is available.</p>
<figure id="attachment_3217" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3217"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2625" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-1.jpg" alt="" width="398" height="417" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-1.jpg 398w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-1-286x300.jpg 286w" sizes="(max-width: 398px) 100vw, 398px" /></figure>
<p>Manage the Security of an Entity.</p>
<p class="wpc--darkluplite-element darkluplite--text">When managing an Entity’s security, Derived Security or direct Security settings can be selected. In derived security, the Entity’s security becomes the same as that of a related Entity; see below.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Entity Security Settings (direct)</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">The Entity Security setting is defined for this Entity, for example, if a Role can operate on <strong class="wpc--darkluplite-element darkluplite--text">all </strong>Entity instances. Finer-grained access control on specific instances or a group of instances (<em class="wpc--darkluplite-element darkluplite--text">Permission Groups) </em>is available only at runtime.</p>
<p class="wpc--darkluplite-element darkluplite--text">To add an Entity Security permission, click the ‘+’ sign after you select Tenants or Roles.</p>
<p class="wpc--darkluplite-element darkluplite--text">When ‘<em class="wpc--darkluplite-element darkluplite--text">Tenants</em>‘ is selected, the entity permission created defines the default behavior in this tenant.</p>
<figure id="attachment_3216" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3216"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2627" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-2.jpg" alt="" width="398" height="380" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-2.jpg 398w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-2-300x286.jpg 300w" sizes="(max-width: 398px) 100vw, 398px" /></figure>
<p>Data-model permissions</p>
<p class="wpc--darkluplite-element darkluplite--text">You have the option to create a new <em class="wpc--darkluplite-element darkluplite--text">Permission Configuration </em>or to use an existing one.</p>
<figure id="attachment_3215" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3215"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2631" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-3.jpg" alt="" width="397" height="271" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-3.jpg 397w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-3-300x205.jpg 300w" sizes="(max-width: 397px) 100vw, 397px" /><figcaption id="caption-attachment-3215" class="wp-caption-text wpc--darkluplite-element darkluplite--text">Select an Existing Permission Configuration or Create a new one.</figcaption></figure>
<figure id="attachment_3214" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3214"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2632" src="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-4.jpg" alt="" width="395" height="400" srcset="https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-4.jpg 395w, https://wizzdi.com/wp-content/uploads/2024/04/setting-on-entity-4-296x300.jpg 296w" sizes="(max-width: 395px) 100vw, 395px" /></figure>
<p>Define the default Tenant-wide permission on an Entity.</p>
<h4 class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Derived Security</strong></h4>
<p class="wpc--darkluplite-element darkluplite--text">Derived security means that the access permissions assigned to a particular entity automatically affect the access permissions of other entities linked to it through a derived security relationship. This relationship is defined based on the data model’s structure, where entities are associated through a one-to-many relationship.</p>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">How Derived Security Works</strong></p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Defining Access Rights on a Primary Entity</strong>: When access rights are granted or denied to an entity (the primary entity), these permissions are considered when determining access to other entities associated with the primary entity in the context of derived security.</li>
<li class="wpc--darkluplite-element darkluplite--text"><b class="wpc--darkluplite-element darkluplite--text">Associated Entities’ Access Rights: </b>Entities with the primary entity associated with derived security inherit the access rights from that primary entity. If an entity is configured to derive its security from another entity, any access rights defined for the primary entity will similarly affect the derived entity. Data model security can be configured on Wizzdi Cloud and managed through the provided APIs.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Influence on Associated instances: </strong>Entity instances of an Entity defined with a derived security get access rights from the associated instances of the Primary Entity defined in the derived security. Instance-level access control can only be managed through the provided API endpoints in runtime. A web app for managing access rights is available.</li>
</ul>
<p class="wpc--darkluplite-element"><strong class="wpc--darkluplite-element darkluplite--text">Example Scenario: Entity Association</strong></p>
<p class="wpc--darkluplite-element darkluplite--text">Consider a scenario with three entities: <code>Project</code>, <code>Task</code>, and <code>User</code>. If the <code>Task</code> entity is associated with the <code>Project</code> entity in such a way that its access rights are derived from the <code>Project</code>, and a user has restricted access to a specific <code>Project</code>, then by the principle of derived security, the user will also have restricted access to the <code>Tasks</code> associated with that <code>Project</code>. Similarly, if a <code>User</code> entity’s access to projects is defined through derived security, the user’s permissions on the <code>Project</code> entity would affect their access to related entities.</p>
<p class="wpc--darkluplite-element darkluplite--text">Configuration and Implementation</p>
<ul class="wpc--darkluplite-element">
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Data-Model Configuration</strong>: In the data model, entities must be explicitly configured to utilize derived security, specifying which fields or relationships govern the derived permissions. This setup involves identifying the paths through which security settings are inherited.</li>
<li class="wpc--darkluplite-element darkluplite--text"><strong class="wpc--darkluplite-element darkluplite--text">Runtime Behavior</strong>: At runtime, the application evaluates the derived security configurations to dynamically apply the appropriate access permissions across entities based on the established relationships and inherited rights. This evaluation ensures that the access control logic remains consistent with the data model’s structure and the intended security policies.</li>
</ul>
<h3 class="wpc--darkluplite-element darkluplite--text">Registration</h3>
<p class="wpc--darkluplite-element darkluplite--text">Users registering to your backend may be associated with a default Role. To set the default role, select one of the predefined Role Configurations.</p>
<h3 class="wpc--darkluplite-element darkluplite--text">Admin User</h3>
<p class="wpc--darkluplite-element darkluplite--text">Define the user having full rights on permissions in the system. When using Spring runtime, this user can access all the exposed endpoints.</p>
<h3 class="wpc--darkluplite-element darkluplite--text">Permissions Web App</h3>
<p class="wpc--darkluplite-element darkluplite--text">In <em class="wpc--darkluplite-element darkluplite--text">Flexicore Runtime</em>, in addition to having open access to all exposed endpoints, this user can manage permissions, tenants, roles, and users via the available web app.</p>
<p class="wpc--darkluplite-element darkluplite--text">Below are some screenshots of the Web App. Solution providers can use the Web App or create a user interface based on the exposed API.</p>
<figure id="attachment_3516" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3516"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2634" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-1.jpg" alt="" width="1892" height="848" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-1.jpg 1892w, https://wizzdi.com/wp-content/uploads/2024/04/manage-1-300x134.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-1-1024x459.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-1-768x344.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/manage-1-1536x688.jpg 1536w" sizes="(max-width: 1892px) 100vw, 1892px" /></figure>
<p class="wpc--darkluplite-element">Tenants management.</p>
<figure id="attachment_3517" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3517"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2636" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-2.jpg" alt="" width="1907" height="843" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-2.jpg 1907w, https://wizzdi.com/wp-content/uploads/2024/04/manage-2-300x133.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-2-1024x453.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-2-768x339.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/manage-2-1536x679.jpg 1536w" sizes="(max-width: 1907px) 100vw, 1907px" /></figure>
<p class="wpc--darkluplite-element">Roles management.</p>
<figure id="attachment_3518" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3518"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2637" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-3.jpg" alt="" width="1887" height="837" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-3.jpg 1887w, https://wizzdi.com/wp-content/uploads/2024/04/manage-3-300x133.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-3-1024x454.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-3-768x341.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/manage-3-1536x681.jpg 1536w" sizes="(max-width: 1887px) 100vw, 1887px" /></figure>
<p class="wpc--darkluplite-element">Users management. Tenant and Role associations are displayed.</p>
<figure id="attachment_3519" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3519"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2638" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-4.jpg" alt="" width="1904" height="850" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-4.jpg 1904w, https://wizzdi.com/wp-content/uploads/2024/04/manage-4-300x134.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-4-1024x457.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-4-768x343.jpg 768w, https://wizzdi.com/wp-content/uploads/2024/04/manage-4-1536x686.jpg 1536w" sizes="(max-width: 1904px) 100vw, 1904px" /></figure>
<p class="wpc--darkluplite-element">Permissions management for both operations and data.</p>
<figure id="attachment_3520" class="wp-caption aligncenter wpc--darkluplite-element" aria-describedby="caption-attachment-3520"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2639" src="https://wizzdi.com/wp-content/uploads/2024/04/manage-5-1536x661-1.jpg" alt="" width="1536" height="661" srcset="https://wizzdi.com/wp-content/uploads/2024/04/manage-5-1536x661-1.jpg 1536w, https://wizzdi.com/wp-content/uploads/2024/04/manage-5-1536x661-1-300x129.jpg 300w, https://wizzdi.com/wp-content/uploads/2024/04/manage-5-1536x661-1-1024x441.jpg 1024w, https://wizzdi.com/wp-content/uploads/2024/04/manage-5-1536x661-1-768x331.jpg 768w" sizes="(max-width: 1536px) 100vw, 1536px" /></figure>
<p class="wpc--darkluplite-element">An <em class="wpc--darkluplite-element darkluplite--text">instance-group</em> management.</p>
<p class="wpc--darkluplite-element darkluplite--text">The above screenshot depicts a single <em class="wpc--darkluplite-element darkluplite--text">instance-group</em> management. An instance group groups multiple instances so that permissions to the entire group can be easily managed.</p>
<p class="wpc--darkluplite-element darkluplite--text">Not shown here is the <em class="wpc--darkluplite-element darkluplite--text">Operation-Group </em>management, which allows concise permission management on multiple operations.</p>
<p class="wpc--darkluplite-element darkluplite--text">The above screenshots are not full and are presented here just to help you understand the permissions management web app.</p>
<p class="wpc--darkluplite-element"><p>The post <a href="https://wizzdi.com/docs/documentation/security/">Security</a> first appeared on <a href="https://wizzdi.com">wizzdi</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://wizzdi.com/docs/documentation/security/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
