<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Peter</title>
    <description>The latest articles on DEV Community by Peter (@parsifal-m).</description>
    <link>https://dev.to/parsifal-m</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2307894%2F411a6468-f59f-4998-9a55-48ee3acabbf7.png</url>
      <title>DEV Community: Peter</title>
      <link>https://dev.to/parsifal-m</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/parsifal-m"/>
    <language>en</language>
    <item>
      <title>Dummy Data For Backstage</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Thu, 27 Mar 2025 08:44:57 +0000</pubDate>
      <link>https://dev.to/parsifal-m/dummy-data-for-backstage-1da5</link>
      <guid>https://dev.to/parsifal-m/dummy-data-for-backstage-1da5</guid>
      <description>&lt;p&gt;We've been using Backstage internally as our developer platform for almost 2 years now (time flies!) and one issue we always tried to "get around to fixing" but never really had the time was a nice way to bulk create dummy entities for our catalog!&lt;/p&gt;

&lt;p&gt;So, I decided to whip up a little tool that can generate a bunch of dummy entities for your Backstage catalog which you can find here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Github Pages:&lt;/strong&gt; &lt;a href="https://parsifal-m.github.io/backstage-catalog-gen/" rel="noopener noreferrer"&gt;https://parsifal-m.github.io/backstage-catalog-gen/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/Parsifal-M/backstage-catalog-gen" rel="noopener noreferrer"&gt;https://github.com/Parsifal-M/backstage-catalog-gen&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This saves us a bunch of time when ever we want to quickly add a bunch of entities to our catalog for testing!&lt;/p&gt;

&lt;p&gt;Hope it saves you some time as well! ❤️&lt;/p&gt;

</description>
      <category>backstage</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>The New Way To Use OPA With Backstage</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Sat, 09 Nov 2024 17:08:35 +0000</pubDate>
      <link>https://dev.to/parsifal-m/the-new-way-to-use-opa-with-backstage-219</link>
      <guid>https://dev.to/parsifal-m/the-new-way-to-use-opa-with-backstage-219</guid>
      <description>&lt;h2&gt;
  
  
  👋  Hello Again!
&lt;/h2&gt;

&lt;p&gt;Last time, I spoke about how you could use the &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins/blob/main/plugins/permission-backend-module-opa-wrapper/README.md" rel="noopener noreferrer"&gt;OPA Wrapper&lt;/a&gt; plugin to let you use the Open Policy Agent and integrate with the &lt;a href="https://backstage.io/docs/permissions/overview/" rel="noopener noreferrer"&gt;Backstage Permissions Framework&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I am back again to to just let you know, we've released &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins?tab=readme-ov-file#beta-plugins" rel="noopener noreferrer"&gt;two new awesome OPA related plugins&lt;/a&gt; that take this to the next level! The plugins are still in &lt;code&gt;beta&lt;/code&gt; and I am looking forward to any and all feedback!&lt;/p&gt;

&lt;h2&gt;
  
  
  💭 So Why Do We Think These Plugins Will Be So Useful?
&lt;/h2&gt;

&lt;p&gt;While the OPA Wrapper Plugin is fantastic for most permissions, some of our needs go beyond simple RBAC and ABAC rules. Sometimes, we need authorization based on dynamic, complex conditions that the default permissions framework doesn’t handle. For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment Fridays: Only developers with 5+ years of experience can push the big red button.&lt;/li&gt;
&lt;li&gt;Conditional UI Elements: Table rows are editable only by the assigned user.&lt;/li&gt;
&lt;li&gt;Middleware on Backend Routes: Authorization rules for APIs based on request method or path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In these cases, we need policies that are both flexible and powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  🥁  Introducing...
&lt;/h2&gt;

&lt;p&gt;So we developed the &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins/blob/main/packages/opa-authz/README.md" rel="noopener noreferrer"&gt;OPA Authz&lt;/a&gt; and &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins/blob/main/plugins/opa-authz-react/README.md" rel="noopener noreferrer"&gt;OPA Authz React&lt;/a&gt; plugins!&lt;/p&gt;

&lt;p&gt;These plugins bring that extra “oomph” to permissions in Backstage by making it easy to implement complex RBAC and ABAC requirements. And best of all, they don’t interfere with the &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins/blob/main/plugins/permission-backend-module-opa-wrapper/README.md" rel="noopener noreferrer"&gt;OPA Wrapper&lt;/a&gt;! They’re designed to work seamlessly together, even in setups that rely on community and core plugins.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 So Why Would I Use It?
&lt;/h2&gt;

&lt;p&gt;Use these plugins when you need that extra layer of flexibility for advanced authorization in Backstage. They let you design more expressive policies to fit nuanced scenarios.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⭐ Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Allows for more flexibility and expressive policies!&lt;/li&gt;
&lt;li&gt;Contains bespoke react components you can use to control the visibility and access based on the results of an OPA policy!&lt;/li&gt;
&lt;li&gt;Bespoke OPA Middleware you can use in your backend routes!&lt;/li&gt;
&lt;li&gt;Fully free and open source!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💬 We’d Love Your Feedback!&lt;br&gt;
Try out these plugins and let us know how they work for you. You can find both on &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, and we’d love to hear your thoughts or answer questions. Or you can leave some comments below!&lt;/p&gt;

</description>
      <category>backstage</category>
      <category>opa</category>
      <category>opensource</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Using the Open Policy Agent with Backstage!</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Wed, 30 Oct 2024 14:21:46 +0000</pubDate>
      <link>https://dev.to/parsifal-m/using-the-open-policy-agent-with-backstage-oc2</link>
      <guid>https://dev.to/parsifal-m/using-the-open-policy-agent-with-backstage-oc2</guid>
      <description>&lt;h2&gt;
  
  
  Hello! 👋
&lt;/h2&gt;

&lt;p&gt;I'm &lt;strong&gt;Peter&lt;/strong&gt;, a software engineer who's spent the last few years working with OPA (Open Policy Agent) and Backstage in my spare time (and now at work!).&lt;/p&gt;

&lt;p&gt;Bringing the two together felt natural, as I have a deep appreciation for OPA—it was my first open-source project contribution, and the support from the maintainers was invaluable in building my confidence to continue contributing and building in Open Source.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Need For Authorization
&lt;/h2&gt;

&lt;p&gt;While many organizations treat everything within their Backstage application as 'public'—meaning accessible to anyone internally—the reality, especially in regulated industries, is that we may need to control visibility more selectively across the organization.&lt;/p&gt;

&lt;p&gt;Backstage comes with an in-built &lt;a href="https://backstage.io/docs/permissions/overview" rel="noopener noreferrer"&gt;permissions framework&lt;/a&gt; for cases like the above, for rarely changing, static authorization policy the built-in permissions framework might be enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  So Why Use OPA With Backstage?
&lt;/h2&gt;

&lt;p&gt;A key motivation for developing the plugins to integrate OPA with Backstage was to avoid the need to rebuild and redeploy the application for each permission change.&lt;/p&gt;

&lt;p&gt;For instance, if a user needed to be added or removed, or a group updated, I wanted to eliminate those urgent "drop everything and edit this permission" moments.&lt;/p&gt;

&lt;p&gt;And so, the &lt;a href="https://github.com/Parsifal-M/backstage-opa-plugins/blob/main/plugins/permission-backend-module-opa-wrapper/README.md" rel="noopener noreferrer"&gt;OPA Permissions Wrapper Plugin&lt;/a&gt; was born! With the recent updates to the Backstage backend, this is technically an "extension" of the permissions framework. It forwards all authorization requests to OPA, where decisions are made based on defined policies—allowing for more dynamic control!&lt;/p&gt;

&lt;h2&gt;
  
  
  What Does This Solve?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Instead of coding policies directly into your Backstage instance with TypeScript, create, edit and manage your policies with OPA!&lt;/li&gt;
&lt;li&gt;Manage your policies in a more flexible way, you can use OPA's Rego language to write your policies.&lt;/li&gt;
&lt;li&gt;No need to redeploy your Backstage instance to update your permission policies, simply update your OPA policies and you are good to go!&lt;/li&gt;
&lt;li&gt;Enable teams to manage their own policies, without needing to know TypeScript or the Backstage codebase!&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other Reading Material
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.styra.com/blog/going-backstage-with-opa/" rel="noopener noreferrer"&gt;Going Backstage With OPA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=N0n_czYo_kE&amp;amp;ab_channel=CNCF%5BCloudNativeComputingFoundation%5D" rel="noopener noreferrer"&gt;Can It Be Done? Building Fine-Grained Access Control for Backstage with OPA&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  To Be Continued?
&lt;/h2&gt;

&lt;p&gt;This is an introduction to spread the word. If you're interested in a deeper, technical write-up of these plugins, let me know and I’ll continue! &lt;/p&gt;

&lt;p&gt;I’m also working on an implementation that fully uses OPA, bypassing the permissions framework for custom Backstage plugins—and I am more than happy to write about it!&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;Peter&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>opa</category>
      <category>backstage</category>
      <category>openpolicyagent</category>
    </item>
  </channel>
</rss>
