# `MishkaBlogWeb.SidebarMenu`
[🔗](https://github.com/mishka-group/mishka_blog/blob/v0.0.1/lib/mishka_blog_web/sidebar_menu.ex#L5)

The blog's admin pages and the one sidebar entry that links to them — a `"sidebar:menus"` plugin
(`MishkaCmsCore.Sidebar`).

Only `blog` is a link; it lands in the core's **Plugins** section. The core never names the blog,
so removing this extension removes its entry and nothing in `MishkaCmsCore.Sidebar` changes.

The other eight are `nav: false` — pages, not links. They are declared because they do NOT share
one answer to "who may open this": Comments needs `admin:dashboard:blog:comment`, and Posts,
Collections, Tags, Bloggers, Teams, Auto Posting and Analytics need `admin:dashboard:blog:post`.
A moderator who holds only the former must not reach the latter. The
link and the blog's Home carry both, since holding either is reason enough to be shown the
section. Each page's data asks for the same area.

Each page reads its own gate from here, so the permission is written down once:

    on_mount {MishkaCmsCore.LiveUserAuth,
              {:require_permission, MishkaBlogWeb.SidebarMenu.permissions("blog.comments")}}

Registered in `MishkaBlog.Application`.

# `error_return`

```elixir
@type error_return() ::
  {:error, [%{action: atom(), field: atom(), message: String.t()}]}
```

# `okey_return`

```elixir
@type okey_return() :: {:ok, struct() | map() | module() | [any()]}
```

# `child_spec`

Returns a specification to start this module under a supervisor.

See `Supervisor`.

# `config`

```elixir
@spec config() :: keyword()
```

# `config`

```elixir
@spec config(atom()) :: any()
```

# `enable`

```elixir
@spec enable() :: okey_return() | error_return()
```

# `get`

```elixir
@spec get() :: keyword()
```

# `health_check`

```elixir
@spec health_check() :: :ok | {:degraded, term()} | {:error, term()}
```

Optional. See `c:MishkaInstaller.Event.Hook.health_check/0`. Override to report health.

# `items`

```elixir
@spec items() :: [MishkaCmsCore.Sidebar.Item.t()]
```

This extension's sidebar entry plus every admin page it owns.

# `on_dependency_error`

```elixir
@spec on_dependency_error(term()) :: term()
```

Optional. See `c:MishkaInstaller.Event.Hook.on_dependency_error/1`. Override to react.

# `permissions`

```elixir
@spec permissions(String.t()) :: [
  MishkaCmsCore.Accounts.Checks.AccessPermissions.requirement()
]
```

The permissions declared for one of this extension's pages. See `MishkaCmsCore.Sidebar.permissions/2`.

# `register`

```elixir
@spec register() :: okey_return() | error_return()
```

# `restart`

```elixir
@spec restart() :: okey_return() | error_return()
```

# `start`

```elixir
@spec start() :: okey_return() | error_return()
```

# `start_link`

# `stop`

```elixir
@spec stop() :: okey_return() | error_return()
```

# `unregister`

```elixir
@spec unregister() :: okey_return() | error_return()
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
