lib/auth/init/roles.ex

defmodule Auth.InitRoles do

  def roles do
    [
      %{
        name: "superadmin", 
        desc: "With great power comes great responsibility", 
        person_id: 1,
        # id: 1,
        permissions: "grant_admin_role"
      },
      %{
        name: "admin", 
        desc: "Can perform all system administration tasks", 
        person_id: 1,
        # id: 2,
        permissions: "manage_people, grant_non_admin_role"
      },
      %{
        name: "moderator", 
        desc: "Can view and neutrally moderate any content. Can ban rule-breakers. Cannot delete.", 
        person_id: 1,
        # id: 3,
        permissions: "edit_any_content, lock_content, unpublish_content, ban_rule_breaking_people, view_deleted"
      },
      %{
        name: "creator", 
        desc: "Can create any content. Can edit and delete their own content.", 
        person_id: 1,
        # id: 4,
        permissions: "create_content, upload_images, edit_own_content, delete_own_content, invite_people"
      },
      %{
        name: "commenter", 
        desc: "Can comment on content where commenting is available.", 
        person_id: 1,
        # id: 5,
        permissions: "comment, flag_comments, flag_content"
      },
      %{
        name: "subscriber", 
        desc: "Subscribes for updates e.g. newsletter or content from a specific person. Cannot comment until verified.", 
        person_id: 1,
        # id: 6,
        permissions: "subscribe, give_feedback"
      },
      %{
        name: "banned", 
        desc: "Can still login to see their content but cannot perform any other action.", 
        person_id: 1,
        # id: 7,
        permissions: "view_content, view_profile, delete_own_content, delete_own_profile"
      },
      %{
        name: "app_admin", 
        desc: "Can manage their own App(s).", 
        person_id: 1,
        # id: 8,
        permissions: "manage_own_apps, create_content, upload_images, edit_own_content, delete_own_content, invite_people"
      }
    ]
  end

  def create_default_roles do
    Enum.each(roles(), fn role ->
      Auth.Role.upsert_role(role)
    end)
  end
end