top
(README.md)
## QOR Admin

Instantly create a beautiful, cross platform, configurable Admin Interface and API for managing your data in minutes.

[![GoDoc](https://godoc.org/github.com/qor/admin?status.svg)](https://godoc.org/github.com/qor/admin)

## Features

- Admin Interface for managing data
- JSON API
- Association handling
- Search and filtering
- Actions/Batch Actions
- Authentication and Authorization (based on Permissions)
- Extendability

## Quick Start

```go
package main

import (
    "fmt"
    "net/http"

    "github.com/jinzhu/gorm"
    _ "github.com/mattn/go-sqlite3"
    "github.com/qor/qor"
    "github.com/qor/admin"
)

// Create a GORM-backend model
type User struct {
  gorm.Model
  Name string
}

// Create another GORM-backend model
type Product struct {
  gorm.Model
  Name        string
  Description string
}

func main() {
  DB, _ := gorm.Open("sqlite3", "demo.db")
  DB.AutoMigrate(&User{}, &Product{})

  // Initalize
  Admin := admin.New(&qor.Config{DB: DB})

  // Create resources from GORM-backend model
  Admin.AddResource(&User{})
  Admin.AddResource(&Product{})

  // Register route
  mux := http.NewServeMux()
  // amount to /admin, so visit `/admin` to view the admin interface
  Admin.MountTo("/admin", mux)

  fmt.Println("Listening on: 9000")
  http.ListenAndServe(":9000", mux)
}
```

`go run main.go` and visit `localhost:9000/admin` to see the result !

## General Setting

### Site Name

Use `SetSiteName` to set QOR Admin's HTML title, the name will also be used to auto-load javascripts and stylesheet files that you can provide for customizing the admin interface.

For example, say you set the Site Name as `QOR Demo`, admin will look up `qor_demo.js`, `qor_demo.css` in [QOR view paths](#customizing-views), and load them if present.

```go
Admin.SetSiteName("QOR DEMO")
```

### Dashboard

QOR Admin provides a default dashboard page with some dummy text. If you want to customize the dashboard, you can create a file `dashboard.tmpl` in [QOR view paths](#customizing-views), QOR Admin will load it as golang templates when rendering the dashboard.

If you want to disable the dashboard, you can redirect it to some other page, for example:

```go
Admin.GetRouter().Get("/", func(c *admin.Context) {
  http.Redirect(c.Writer, c.Request, "/admin/clients", http.StatusSeeOther)
})
```

### Authentication

QOR Admin provides a flexible authorization solution. With it, you could integrate with your current authorization method.

What you need to do is implement an `Auth` interface like below, and set it in the Admin value.

```go
type Auth interface {
	GetCurrentUser(*Context) qor.CurrentUser // get current user, if don't have permission, then return nil
	LoginURL(*Context) string // get login url, if don't have permission, will redirect to this url
	LogoutURL(*Context) string // get logout url, if click logout link from admin interface, will visit this page
}
```

Here is an example:

```go
type Auth struct{}

func (Auth) LoginURL(c *admin.Context) string {
  return "/login"
}

func (Auth) LogoutURL(*Context) string
  return "/logout"
}

func (Auth) GetCurrentUser(c *admin.Context) qor.CurrentUser {
  if userid, err := c.Request.Cookie("userid"); err == nil {
    var user User
    if !DB.First(&user, "id = ?", userid.Value).RecordNotFound() {
      return &user
    }
  }
  return nil
}

func (u User) DisplayName() string {
  return u.Name
}

// Register Auth for QOR Admin
Admin.SetAuth(&Auth{})
```

### Menu

#### Register a Menu

It is possible to define a nested menu structure for the admin interface.

```go
Admin.AddMenu(&admin.Menu{Name: "Dashboard", Link: "/admin"})

// Register nested menu
Admin.AddMenu(&admin.Menu{Name: "menu", Link: "/link", Ancestors: []string{"Dashboard"}})

// Register menu with permission
Admin.AddMenu(&admin.Menu{Name: "Report", Link: "/admin", Permission: roles.Allow(roles.Read, "admin")})
```

#### Add Resources to a menu

```go
Admin.AddResource(&User{})

Admin.AddResource(&Product{}, &admin.Config{Menu: []string{"Product Management"}})
Admin.AddResource(&Color{}, &admin.Config{Menu: []string{"Product Management"}})
Admin.AddResource(&Size{}, &admin.Config{Menu: []string{"Product Management"}})

Admin.AddResource(&Order{}, &admin.Config{Menu: []string{"Order Management"}})
```

If you don't want a resource to be displayed in the menu, pass the Invisible option:

```go
Admin.AddResource(&User{}, &admin.Config{Invisible: true})
```

### Internationalization

To translate admin interface to a new language, you could use `i18n` [https://github.com/qor/i18n](https://github.com/qor/i18n)

## Working with a Resource

Every QOR Admin Resource needs a [GORM-backend](https://github.com/jinzhu/gorm) model. Once you have defined the model you can create a QOR Admin resource: `Admin.AddResource(&Product{})`

Once a resource has been added, QOR Admin will generate the admin interface to manage it, including a RESTFul JSON API.

So for above example, you could visit `localhost:9000/admin/products` to manage `Product` in the HTML admin interface, or use the RESTFul JSON api `localhost:9000/admin/products.json` to perform CRUD activities.

### Customizing CRUD pages

```go
// Set attributes will be shown in the index page
// show given attributes
order.IndexAttrs("User", "PaymentAmount", "ShippedAt", "CancelledAt", "State", "ShippingAddress")
// show all attributes except `State`
order.IndexAttrs("-State")

// Set attributes will be shown in the new page
order.NewAttrs("User", "PaymentAmount", "ShippedAt", "CancelledAt", "State", "ShippingAddress")
// show all attributes except `State`
order.NewAttrs("-State")
// Structure the new form to make it tidy and clean with `Section`
product.NewAttrs(
  &admin.Section{
		Title: "Basic Information",
		Rows: [][]string{
			{"Name"},
			{"Code", "Price"},
		}
  },
  &admin.Section{
		Title: "Organization",
		Rows: [][]string{
			{"Category", "Collections", "MadeCountry"},
    }
  },
  "Description",
  "ColorVariations",
}

// Set attributes will be shown for the edit page, similiar with new page
order.EditAttrs("User", "PaymentAmount", "ShippedAt", "CancelledAt", "State", "ShippingAddress")

// Set attributes will be shown for the show page, similiar with new page
// If ShowAttrs haven't been configured, there will be no show page generated, by will show the edit from instead
order.ShowAttrs("User", "PaymentAmount", "ShippedAt", "CancelledAt", "State", "ShippingAddress")
```

### Search

It is possible to specify database table columns as search attributes, using `SearchAttrs`, the columns will be used to perform any search queries. It is also possible to specify nested relations.

```go
// Search products with its name, code, category's name, brand's name
product.SearchAttrs("Name", "Code", "Category.Name", "Brand.Name")
```

If you want to fully customize the search function, you could set the `SearchHandler`:

```go
order.SearchHandler = func(keyword string, context *qor.Context) *gorm.DB {
  // search orders
}
```

#### Search Center

You might want to search a broad range of resources from a single web page, in this case `Search Center` is for you!  Simply add resources that you want to be searchable to the Admin value's search center:

```go
// add resource `product`, `user`, `order` to search resources
Admin.AddSearchResource(product, user, order)
```

[Search Center Online Demo](http://demo.getqor.com/admin/!search)

### Scopes

You can define scopes to filter data with given conditions, for example:

```go
// Only show actived users
user.Scope(&admin.Scope{Name: "Active", Handle: func(db *gorm.DB, context *qor.Context) *gorm.DB {
  return db.Where("active = ?", true)
}})
```

#### Group Scopes

```go
order.Scope(&admin.Scope{Name: "Paid", Group: "State", Handle: func(db *gorm.DB, context *qor.Context) *gorm.DB {
  return db.Where("state = ?", "paid")
}})

order.Scope(&admin.Scope{Name: "Shipped", Group: "State", Handle: func(db *gorm.DB, context *qor.Context) *gorm.DB {
  return db.Where("state = ?", "shipped")
}})
```

[Scopes Online Demo](http://demo.getqor.com/admin/products)

### Actions

QOR Admin has the notion of four action modes:

* Bulk actions (will be shown in index page as bulk actions)
* Edit form action (will be shown in edit page)
* Show page action (will be shown in show page)
* Menu item action (will be shown in table's menu)

You can register an Action of any mode using the `Action` method, along with `Modes` values to contol where to show them:

```go
product.Action(&admin.Action{
	Name: "enable",
	Handle: func(actionArgument *admin.ActionArgument) error {
    // `FindSelectedRecords` => return selected record in bulk action mode, return current record in other mode
		for _, record := range actionArgument.FindSelectedRecords() {
			actionArgument.Context.DB.Model(record.(*models.Product)).Update("disabled", false)
		}
		return nil
	},
	Modes: []string{"index", "edit", "show", "menu_item"},
})

// Register Actions need user's input
order.Action(&admin.Action{
  Name: "Ship",
  Handle: func(argument *admin.ActionArgument) error {
    trackingNumberArgument := argument.Argument.(*trackingNumberArgument)
    for _, record := range argument.FindSelectedRecords() {
      argument.Context.GetDB().Model(record).UpdateColumn("tracking_number", trackingNumberArgument.TrackingNumber)
    }
    return nil
  },
  Resource: Admin.NewResource(&trackingNumberArgument{}),
  Modes: []string{"show", "menu_item"},
})

// the ship action's argument
type trackingNumberArgument struct {
  TrackingNumber string
}

// Use `Visible` to hide registered Action in some case
order.Action(&admin.Action{
  Name: "Cancel",
  Handle: func(argument *admin.ActionArgument) error {
    // cancel the order
  },
  Visible: func(record interface{}) bool {
    if order, ok := record.(*models.Order); ok {
      for _, state := range []string{"draft", "checkout", "paid", "processing"} {
        if order.State == state {
          return true
        }
      }
    }
    return false
  },
  Modes: []string{"show", "menu_item"},
})
```

### Customizing the Form

By default, management pages in QOR Admin are rendered based on your resource's fields' data types and relations. The default should satisfy most use cases, however should you need to you can customize the rendering by overwritting the `Meta` definition.

There are some Meta types that have been predefined, including `string`, `password`, `date`, `datetime`, `rich_editor`, `select_one`, `select_many` and so on (see full list here: [qor admin form templates](https://github.com/qor/admin/tree/master/views/metas/form "qor admin form templates")). QOR Admin will auto select a type for `Meta` based on a field's data type. For example, if a field's type is `time.Time`, QOR Admin will determine `datetime` as the type.

```go
// Change the Meta type of `Password` field in User resource from `string` (default value) to `password`
user.Meta(&admin.Meta{Name: "Password", Type: "password"})

// Change the Meta type of `Gender` field in User resource from `string` (default value) to `select_one`, with options `M` | `F`
user.Meta(&admin.Meta{Name: "Gender", Type: "select_one", Collection: []string{"M", "F"}})
```

### Authorization and Permissions

Authorization in QOR Admin is based on setting Permissions per Role. QOR Admin uses [https://github.com/qor/roles](https://github.com/qor/roles) for Permission management, please refer to it's documentation for information on how to define Roles and Permissions.

```go
// CRUD permission for admin users, deny create permission for manager
user := Admin.AddResource(&User{}, &admin.Config{Permission: roles.Allow(roles.CRUD, "admin").Deny(roles.Create, "manager")})

// For user's Email field, allow CRUD for admin users, deny update for manager
user.Meta(&admin.Meta{Name: "Email", Permission: roles.Allow(roles.CRUD, "admin").Deny(roles.Create, "manager")})
```

### An automagic RESTFul API

The RESTFul API shares the same configuration as your admin interface, including actions and permissions - so after you have configured your admin interface, you will get an API for free!

## Extendability

#### Configuring QOR Admin Resources Automatically

If your model has the following two methods defined, they will be called when registering:

```go
func ConfigureQorResourceBeforeInitialize(resource) {
  // resource.(*admin.Resource)
}

func ConfigureQorResource(resource) {
  // resource.(*admin.Resource)
}
```

#### Configuring QOR Admin Meta Automatically

If your field's type has the following two methods defined, they will be called when registering:

```go
func ConfigureQorMetaBeforeInitialize(meta) {
  // resource.(*admin.Meta)
}

func ConfigureMetaInterface(meta) {
  // resource.(*admin.Meta)
}
```

#### Using a Theme

A custom theme can be applied using a custom javascript and css file, for example to make a product page look super fancy. To apply a custom theme, provide the theme name using the `UseTheme` method, this will load `assets/javascripts/fancy.js` and `assets/stylesheets/fancy.css` from [QOR view paths](#customizing-views)

```go
product.UseTheme("fancy")
```

#### Customizing Views

QOR Admin will look up templates in QOR Admin view paths and use them to render any admin page. By placing your own templates in `{current path}/app/views/qor` you can extend your application by customizing it's views. If you want to customize your views from other places, you could register any new paths with `admin.RegisterViewPath`.

Customize Views Rules:

* To overwrite a template, create a file with the same name under `{current path}/app/views/qor`.
* To overwrite templates for a specific resource, put templates with the same name in `{qor view paths}/{resource param}`, for example `{current path}/app/views/qor/products/index.tmpl`.
* To overwrite templates for resources using a theme, put templates with the same name in `{qor view paths}/themes/{theme name}`.

#### Registering HTTP routes

Qor admin uses Qor's Router.

```go
router := Admin.GetRouter()

router.Get("/path", func(context *admin.Context) {
    // do something here
})

router.Post("/path", func(context *admin.Context) {
    // do something here
})

router.Put("/path", func(context *admin.Context) {
    // do something here
})

router.Delete("/path", func(context *admin.Context) {
    // do something here
})

// naming route
router.Get("/path/:name", func(context *admin.Context) {
    context.Request.URL.Query().Get(":name")
})

// regexp support
router.Get("/path/:name[world]", func(context *admin.Context) { // "/hello/world"
    context.Request.URL.Query().Get(":name")
})

router.Get("/path/:name[\\d+]", func(context *admin.Context) { // "/hello/123"
    context.Request.URL.Query().Get(":name")
})
```

#### Plugins

There are a few plugins created for QOR already, you can find some of them at [https://github.com/qor](https://github.com/qor), visit them to learn more about how to extend QOR.

## Live DEMO

* Live Demo [http://demo.getqor.com/admin](http://demo.getqor.com/admin)
* Source Code of Live Demo [https://github.com/qor/qor-example](https://github.com/qor/qor-example)

## Q & A

* How to integrate with beego

```go
mux := http.NewServeMux()
Admin.MountTo("/admin", mux)

beego.Handler("/admin/*", mux)
beego.Run()
```

* How to integrate with Gin

```go
mux := http.NewServeMux()
Admin.MountTo("/admin", mux)

r := gin.Default()
r.Any("/admin/*w", gin.WrapH(mux))
r.Run()
```

## License

Released under the [MIT License](http://opensource.org/licenses/MIT).

Imported by 196 package(s)

  1. github.com/8legd/HugoCMS/config
  2. github.com/8legd/HugoCMS/qor
  3. github.com/8legd/hugocms/config
  4. github.com/8legd/hugocms/qor
  5. github.com/8legd/hugocms/server
  6. github.com/GazeboXu/qor-example
  7. github.com/GazeboXu/qor-example/app/account
  8. github.com/GazeboXu/qor-example/app/admin
  9. github.com/GazeboXu/qor-example/app/api
  10. github.com/GazeboXu/qor-example/app/orders
  11. github.com/GazeboXu/qor-example/app/pages
  12. github.com/GazeboXu/qor-example/app/products
  13. github.com/GazeboXu/qor-example/app/stores
  14. github.com/GazeboXu/qor-example/config/application
  15. github.com/GazeboXu/qor-example/config/auth
  16. github.com/Jungju/admin/tests/dummy
  17. github.com/Jungju/i18n
  18. github.com/Jungju/i18n/exchange_actions
  19. github.com/Jungju/i18n/inline_edit
  20. github.com/Jungju/qor_admin_auth
  21. github.com/Kiennh/activity
  22. github.com/ReSTARTR/goa-gorm-sample
  23. github.com/Requaos/qor-example
  24. github.com/Requaos/qorfun
  25. github.com/alfatraining/i18n
  26. github.com/alfatraining/i18n/exchange_actions
  27. github.com/alfatraining/i18n/inline_edit
  28. github.com/andboson/qor-admin-test/config/admin
  29. github.com/andboson/qor-admin-test/config/admin/bindatafs
  30. github.com/andboson/qor-admin-test/config/api
  31. github.com/andboson/qor-admin-test/config/auth
  32. github.com/andboson/worker
  33. github.com/azumads/selenium/app
  34. github.com/betrok/sorting
  35. github.com/binku87/worker
  36. github.com/chazzuka/qor-example/config/admin
  37. github.com/chazzuka/qor-example/config/api
  38. github.com/chazzuka/qor-example/config/auth
  39. github.com/cryptix/qor_help
  40. github.com/dwarvesf/delivr-admin/app/model
  41. github.com/dwarvesf/delivr-admin/config/admin
  42. github.com/dwarvesf/delivr-admin/config/api
  43. github.com/dwarvesf/delivr-admin/config/auth
  44. github.com/dwarvesf/publish
  45. github.com/eddyxu/sorting
  46. github.com/fffilimonov/i18n
  47. github.com/fundon/admin/tests/dummy
  48. github.com/gigawattio/bindatafs
  49. github.com/golangpkg/qor-cms
  50. github.com/golangpkg/qor-cms-demos/demo01-simple-admin
  51. github.com/golangpkg/qor-cms-demos/demo02-admin-auth
  52. github.com/golangpkg/qor-cms-demos/demo03-user-crud
  53. github.com/golangpkg/qor-cms-demos/demo04-api
  54. github.com/golangpkg/qor-cms-demos/demo05-auth
  55. github.com/golangpkg/qor-cms-demos/demo06-i18n
  56. github.com/golangpkg/qor-cms-demos/demo07-my-meta-type
  57. github.com/golangpkg/qor-cms-demos/demo08-admin-login
  58. github.com/golangpkg/qor-cms-demos/demo09-beego-login-page
  59. github.com/golangpkg/qor-cms-demos/demo10-admin-action
  60. github.com/golangpkg/qor-cms/conf/auth
  61. github.com/golangpkg/qor-cms/models
  62. github.com/gopheracademy/congo
  63. github.com/gotstago/sandbox/admin
  64. github.com/grengojbo/action_bar
  65. github.com/huacnlee/mediom/app
  66. github.com/iReflect/reflect-app/apps/feedback/models
  67. github.com/iReflect/reflect-app/apps/retrospective/models
  68. github.com/iReflect/reflect-app/apps/user/models
  69. github.com/iReflect/reflect-app/servers
  70. github.com/illyabusigin/congo
  71. github.com/joshkamau/qor_flash_message_bug
  72. github.com/jungju/admin/tests/dummy
  73. github.com/jungju/i18n
  74. github.com/jungju/qor_admin_auth
  75. github.com/kiennh/activity
  76. github.com/matematik7/gongo/admin
  77. github.com/mmanjoura/cms-api
  78. github.com/mmanjoura/cms-api/app/account
  79. github.com/mmanjoura/cms-api/app/admin
  80. github.com/mmanjoura/cms-api/app/api
  81. github.com/mmanjoura/cms-api/app/orders
  82. github.com/mmanjoura/cms-api/app/pages
  83. github.com/mmanjoura/cms-api/app/products
  84. github.com/mmanjoura/cms-api/app/stores
  85. github.com/mmanjoura/cms-api/config/application
  86. github.com/mmanjoura/cms-api/config/auth
  87. github.com/mmanjoura/qor-app/action_bar
  88. github.com/mmanjoura/qor-app/activity
  89. github.com/mmanjoura/qor-app/admin/tests/dummy
  90. github.com/mmanjoura/qor-app/application
  91. github.com/mmanjoura/qor-app/banner_editor
  92. github.com/mmanjoura/qor-app/filebox
  93. github.com/mmanjoura/qor-app/help
  94. github.com/mmanjoura/qor-app/i18n
  95. github.com/mmanjoura/qor-app/i18n/exchange_actions
  96. github.com/mmanjoura/qor-app/i18n/inline_edit
  97. github.com/mmanjoura/qor-app/l10n
  98. github.com/mmanjoura/qor-app/l10n/publish
  99. github.com/mmanjoura/qor-app/location
  100. github.com/mmanjoura/qor-app/media
  101. github.com/mmanjoura/qor-app/media/asset_manager
  102. github.com/mmanjoura/qor-app/media/media_library
  103. github.com/mmanjoura/qor-app/media_library
  104. github.com/mmanjoura/qor-app/notification
  105. github.com/mmanjoura/qor-app/page_builder
  106. github.com/mmanjoura/qor-app/publish
  107. github.com/mmanjoura/qor-app/publish2
  108. github.com/mmanjoura/qor-app/qor-example
  109. github.com/mmanjoura/qor-app/qor-example-cases/config
  110. github.com/mmanjoura/qor-app/qor-example/config/application
  111. github.com/mmanjoura/qor-app/qor-example/config/auth
  112. github.com/mmanjoura/qor-app/seo
  113. github.com/mmanjoura/qor-app/serializable_meta
  114. github.com/mmanjoura/qor-app/slug
  115. github.com/mmanjoura/qor-app/sorting
  116. github.com/mmanjoura/qor-app/transition
  117. github.com/mmanjoura/qor-app/variations
  118. github.com/mmanjoura/qor-app/widget
  119. github.com/mmanjoura/qor-app/worker
  120. github.com/mmanjoura/qor-example/config/admin
  121. github.com/mmanjoura/qor-example/config/api
  122. github.com/mmanjoura/qor-example/config/auth
  123. github.com/mstat/qor-example/config/admin
  124. github.com/mstat/qor-example/config/api
  125. github.com/mstat/qor-example/config/auth
  126. github.com/pfcoder/media_library
  127. github.com/qor/action_bar
  128. github.com/qor/activity
  129. github.com/qor/admin/tests/dummy
  130. github.com/qor/application
  131. github.com/qor/banner_editor
  132. github.com/qor/filebox
  133. github.com/qor/help
  134. github.com/qor/i18n
  135. github.com/qor/i18n/exchange_actions
  136. github.com/qor/i18n/inline_edit
  137. github.com/qor/l10n
  138. github.com/qor/l10n/publish
  139. github.com/qor/location
  140. github.com/qor/media
  141. github.com/qor/media/asset_manager
  142. github.com/qor/media/media_library
  143. github.com/qor/media_library
  144. github.com/qor/metas/daterange
  145. github.com/qor/metas/frequency
  146. github.com/qor/notification
  147. github.com/qor/page_builder
  148. github.com/qor/publish
  149. github.com/qor/publish2
  150. github.com/qor/qor-example-cases/config
  151. github.com/qor/qor-example/app/account
  152. github.com/qor/qor-example/app/admin
  153. github.com/qor/qor-example/app/api
  154. github.com/qor/qor-example/app/orders
  155. github.com/qor/qor-example/app/pages
  156. github.com/qor/qor-example/app/products
  157. github.com/qor/qor-example/app/stores
  158. github.com/qor/qor-example/config/admin
  159. github.com/qor/qor-example/config/admin/bindatafs
  160. github.com/qor/qor-example/config/api
  161. github.com/qor/qor-example/config/application
  162. github.com/qor/qor-example/config/auth
  163. github.com/qor/seo
  164. github.com/qor/serializable_meta
  165. github.com/qor/slug
  166. github.com/qor/sorting
  167. github.com/qor/transition
  168. github.com/qor/widget
  169. github.com/qor/worker
  170. github.com/raven-chen/qor-doc-demo/config/admin
  171. github.com/rbastic/transition
  172. github.com/reechou/erp/config/admin
  173. github.com/reechou/erp/config/admin/bindatafs
  174. github.com/reechou/erp/config/api
  175. github.com/reechou/erp/config/auth
  176. github.com/reechou/real-erp/admin
  177. github.com/reechou/real-erp/auth
  178. github.com/steveoc64/publish2
  179. github.com/steveoc64/qor-example/config/admin
  180. github.com/steveoc64/qor-example/config/admin/bindatafs
  181. github.com/steveoc64/qor-example/config/api
  182. github.com/steveoc64/qor-example/config/auth
  183. github.com/theplant/auth_examples/api
  184. github.com/uzmo/media
  185. github.com/uzmo/media/asset_manager
  186. github.com/uzmo/media/media_library
  187. github.com/uzmo/transition
  188. github.com/uzmo/worker
  189. github.com/wfxiang08/admin/tests/dummy
  190. github.com/whimsycwd/qor-example/config/admin
  191. github.com/whimsycwd/qor-example/config/api
  192. github.com/whimsycwd/qor-example/config/auth
  193. github.com/yalay/picCms/controllers
  194. github.com/youryharchenko/qor-example/config/admin
  195. github.com/youryharchenko/qor-example/config/api
  196. github.com/youryharchenko/qor-example/config/auth

Imported only in test by 22 package(s)

  1. github.com/Jungju/admin
  2. github.com/ademuanthony/admin
  3. github.com/alfatraining/admin
  4. github.com/binku87/admin
  5. github.com/derlaft/admin
  6. github.com/dwarvesf/admin
  7. github.com/ethanfrey/admin
  8. github.com/fundon/admin
  9. github.com/glebtv/admin
  10. github.com/grengojbo/admin
  11. github.com/jirfag/admin
  12. github.com/jungju/admin
  13. github.com/martende/admin
  14. github.com/martende/qor_admin
  15. github.com/mmanjoura/qor-app/admin
  16. github.com/nguyendangminh/admin
  17. github.com/pfcoder/admin
  18. github.com/retailify/admin
  19. github.com/superpan/admin
  20. github.com/vedhavyas/admin
  21. github.com/wfxiang08/admin
  22. github.com/zhaodj/admin

Imports 10 package(s)

  1. github.com/qor/qor/utils
  2. github.com/jinzhu/inflection
  3. github.com/qor/qor
  4. github.com/qor/responder
  5. github.com/theplant/cldr
  6. github.com/microcosm-cc/bluemonday
  7. github.com/qor/qor/resource
  8. github.com/jinzhu/gorm
  9. github.com/jinzhu/now
  10. github.com/qor/roles

Test imports 4 package(s)

  1. github.com/mattn/go-sqlite3
  2. github.com/qor/qor/test/utils
  3. github.com/qor/media_library
  4. github.com/fatih/color