json-api-server/visibility.html

42 lines
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Field Visibility | json-api-server</title>
<meta name="generator" content="VuePress 1.8.2">
<meta name="description" content="A fully automated JSON:API server implementation in PHP.">
<link rel="preload" href="/json-api-server/assets/css/0.styles.57b98ad2.css" as="style"><link rel="preload" href="/json-api-server/assets/js/app.67f738be.js" as="script"><link rel="preload" href="/json-api-server/assets/js/2.45932810.js" as="script"><link rel="preload" href="/json-api-server/assets/js/25.5bf262d7.js" as="script"><link rel="prefetch" href="/json-api-server/assets/js/10.f39ec3a0.js"><link rel="prefetch" href="/json-api-server/assets/js/11.724dd987.js"><link rel="prefetch" href="/json-api-server/assets/js/12.9934b242.js"><link rel="prefetch" href="/json-api-server/assets/js/13.01e72a34.js"><link rel="prefetch" href="/json-api-server/assets/js/14.0a2e817f.js"><link rel="prefetch" href="/json-api-server/assets/js/15.88e8e5d1.js"><link rel="prefetch" href="/json-api-server/assets/js/16.c308b4df.js"><link rel="prefetch" href="/json-api-server/assets/js/17.8ed4f1c9.js"><link rel="prefetch" href="/json-api-server/assets/js/18.3550a25e.js"><link rel="prefetch" href="/json-api-server/assets/js/19.65cfb425.js"><link rel="prefetch" href="/json-api-server/assets/js/20.b9e8a752.js"><link rel="prefetch" href="/json-api-server/assets/js/21.80416eea.js"><link rel="prefetch" href="/json-api-server/assets/js/22.c8abdf2c.js"><link rel="prefetch" href="/json-api-server/assets/js/23.298bad12.js"><link rel="prefetch" href="/json-api-server/assets/js/24.f0bf2e90.js"><link rel="prefetch" href="/json-api-server/assets/js/26.1472df94.js"><link rel="prefetch" href="/json-api-server/assets/js/3.54f7104d.js"><link rel="prefetch" href="/json-api-server/assets/js/4.a1fa2109.js"><link rel="prefetch" href="/json-api-server/assets/js/5.42433e02.js"><link rel="prefetch" href="/json-api-server/assets/js/6.60d915b0.js"><link rel="prefetch" href="/json-api-server/assets/js/7.62c9b4c8.js"><link rel="prefetch" href="/json-api-server/assets/js/8.2eaea85f.js"><link rel="prefetch" href="/json-api-server/assets/js/9.e517d767.js">
<link rel="stylesheet" href="/json-api-server/assets/css/0.styles.57b98ad2.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/json-api-server/" class="home-link router-link-active"><!----> <span class="site-name">json-api-server</span></a> <div class="links"><!----> <nav class="nav-links can-hide"><div class="nav-item"><a href="/json-api-server/" class="nav-link">
Guide
</a></div> <a href="https://github.com/tobyz/json-api-server" target="_blank" rel="noopener noreferrer" class="repo-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/json-api-server/" class="nav-link">
Guide
</a></div> <a href="https://github.com/tobyz/json-api-server" target="_blank" rel="noopener noreferrer" class="repo-link">
GitHub
<span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></a></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Getting Started</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/json-api-server/" aria-current="page" class="sidebar-link">Introduction</a></li><li><a href="/json-api-server/install.html" class="sidebar-link">Installation</a></li><li><a href="/json-api-server/requests.html" class="sidebar-link">Handling Requests</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>Defining Resources</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/json-api-server/adapters.html" class="sidebar-link">Adapters</a></li><li><a href="/json-api-server/scopes.html" class="sidebar-link">Scopes</a></li><li><a href="/json-api-server/attributes.html" class="sidebar-link">Attributes</a></li><li><a href="/json-api-server/relationships.html" class="sidebar-link">Relationships</a></li><li><a href="/json-api-server/visibility.html" aria-current="page" class="active sidebar-link">Field Visibility</a></li><li><a href="/json-api-server/writing.html" class="sidebar-link">Field Writability</a></li><li><a href="/json-api-server/filtering.html" class="sidebar-link">Filtering</a></li><li><a href="/json-api-server/sorting.html" class="sidebar-link">Sorting</a></li><li><a href="/json-api-server/pagination.html" class="sidebar-link">Pagination</a></li><li><a href="/json-api-server/meta.html" class="sidebar-link">Meta Information</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Endpoints</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/json-api-server/list.html" class="sidebar-link">Listing Resources</a></li><li><a href="/json-api-server/show.html" class="sidebar-link">Showing Resources</a></li><li><a href="/json-api-server/create.html" class="sidebar-link">Creating Resources</a></li><li><a href="/json-api-server/update.html" class="sidebar-link">Updating Resources</a></li><li><a href="/json-api-server/delete.html" class="sidebar-link">Deleting Resources</a></li></ul></section></li><li><section class="sidebar-group depth-0"><p class="sidebar-heading"><span>Advanced</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/json-api-server/errors.html" class="sidebar-link">Error Handling</a></li><li><a href="/json-api-server/laravel.html" class="sidebar-link">Laravel Helpers</a></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="field-visibility"><a href="#field-visibility" class="header-anchor">#</a> Field Visibility</h1> <p>Restrict the visibility of a field using the <code>visible</code> and <code>hidden</code> methods.</p> <p>You can optionally supply a closure to these methods which will receive the model instance, and should return a boolean value.</p> <p>For example, the following schema will make an email attribute that only appears when the authenticated user is viewing their own profile:</p> <div class="language-php extra-class"><pre class="language-php"><code><span class="token variable">$type</span><span class="token operator">-&gt;</span><span class="token function">attribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'email'</span><span class="token punctuation">)</span>
<span class="token operator">-&gt;</span><span class="token function">visible</span><span class="token punctuation">(</span><span class="token keyword">function</span> <span class="token punctuation">(</span><span class="token variable">$model</span><span class="token punctuation">,</span> <span class="token class-name type-declaration">Context</span> <span class="token variable">$context</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token variable">$model</span><span class="token operator">-&gt;</span><span class="token property">id</span> <span class="token operator">===</span> <span class="token variable">$context</span><span class="token operator">-&gt;</span><span class="token function">getRequest</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">-&gt;</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'userId'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div><p>Hiding a field completely is useful when you want it the field to be available for <a href="/json-api-server/writing.html">writing</a> but not reading for example, a password field.</p> <div class="language-php extra-class"><pre class="language-php"><code><span class="token variable">$type</span><span class="token operator">-&gt;</span><span class="token function">attribute</span><span class="token punctuation">(</span><span class="token string single-quoted-string">'password'</span><span class="token punctuation">)</span>
<span class="token operator">-&gt;</span><span class="token function">hidden</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
<span class="token operator">-&gt;</span><span class="token function">writable</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
</code></pre></div></div> <footer class="page-edit"><div class="edit-link"><a href="https://github.com/tobyz/json-api-server/edit/master/docs/visibility.md" target="_blank" rel="noopener noreferrer">Edit this page</a> <span><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false" x="0px" y="0px" viewBox="0 0 100 100" width="15" height="15" class="icon outbound"><path fill="currentColor" d="M18.8,85.1h56l0,0c2.2,0,4-1.8,4-4v-32h-8v28h-48v-48h28v-8h-32l0,0c-2.2,0-4,1.8-4,4v56C14.8,83.3,16.6,85.1,18.8,85.1z"></path> <polygon fill="currentColor" points="45.7,48.7 51.3,54.3 77.2,28.5 77.2,37.2 85.2,37.2 85.2,14.9 62.8,14.9 62.8,22.9 71.5,22.9"></polygon></svg> <span class="sr-only">(opens new window)</span></span></div> <!----></footer> <div class="page-nav"><p class="inner"><span class="prev">
<a href="/json-api-server/relationships.html" class="prev">
Relationships
</a></span> <span class="next"><a href="/json-api-server/writing.html">
Field Writability
</a>
</span></p></div> </main></div><div class="global-ui"></div></div>
<script src="/json-api-server/assets/js/app.67f738be.js" defer></script><script src="/json-api-server/assets/js/2.45932810.js" defer></script><script src="/json-api-server/assets/js/25.5bf262d7.js" defer></script>
</body>
</html>