Hi madrian - In case of the custom components, managing the permissions requires bit of a workarounds, as Tyson mentioned, that could be one way of doing it, but we have noticed that using the /boards/id/[your board id]/view/allowed call also tends to show the "Widget could not be displayed" error. As we had a similar widget where we had to show/hide boards/ categories etc in a custom component, you can use following code and see if this helps, there might be few edits required to run it as per your requirements, but it should be working fine without any edits also.
This is working fine for us, you can scale it to your needs.
<!-- To fetch the list of all the nested boards, blogs and ideas inside the root category-->
<#assign customer_boards = rest("/categories/id/customer-community/boards/nested?restapi.response_style=view").boards/>
<#assign partners_resources = rest("/categories/id/partner-resources/boards/nested?restapi.response_style=view").boards/>
<div class="discussion_topic">
<div class="content pie">
<div class="boxtext">
<#if user.registered > <#-- if the user is not anonymous -->
<#assign show_module = false />
<#list restadmin("/users/id/${user.id?c}/roles").roles.role as role> <#-- REST call to get the user's roles -->
<!-- here, you define the roles for those who see the restricted boards-->
<#if role.name?? && (role.name == "Administrator") || role.name?? && (role.name == "Moderator")>
<#assign show_module = true />
</#if>
</#list>
<#if show_module>
<section class="section">
<#assign abuse_reports = rest("/categories/id/administration-and-moderation/boards?restapi.response_style=view").boards/>
<div class="section_container" >
<div class="boxtitleinner">Abuse Reports</div>
<#list abuse_reports.board as topics>
<!-- Getting the threads count-->
<#assign get_threads_count = rest("/boards/id/${topics.id}/threads/count").value/>
<#if coreNode.title == topics.title>
<div class="active_thread"><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
<#else>
<div><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
</#if>
</#list>
</div>
</section>
</#if>
</#if>
<!-- customer_boards -->
<section class="section">
<#if page.name=="CommunityPage">
<center>
<div class="discussion_btn"><a href="/t5/forums/postpage/choose-node/true/interaction-style/forum">Create New Discussion</a></div>
</center>
</#if>
<div class="section_container" >
<div class="boxtitleinner">Discussions</div>
<#list customer_boards.board as topics>
<!-- Getting the threads count-->
<#assign get_threads_count = rest("/boards/id/${topics.id}/threads/count").value/>
<#if coreNode.title == topics.title>
<div class="active_thread"><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
<#else>
<div><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
</#if>
</#list>
</div>
</section>
<!-- To get the access check, we have a separate partner category created and given the Partner Access role to it -->
<section class="section">
<div class="section_container" >
<div class="boxtitleinner">Resources</div>
<#list partners_resources.board as topics>
<!-- Getting the threads count-->
<#assign get_threads_count = rest("/boards/id/${topics.id}/threads/count").value/>
<#if coreNode.title == topics.title>
<div class="active_thread"><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
<#else>
<div><a href="${topics.@view_href}">${topics.title}</a><span class="number">${get_threads_count}</span></div>
</#if>
</#list>
</div>
</section>
</div>
</div>
</div>