Link Search Menu Expand Document

(注: 本demo还在改进, 界面和功能会有变化)

运行demo

系统需求:

  • Go version >= 1.2(推荐>= 1.3)
  • Mysql(其它数据库的支持正在开发中)
  • npm(只需开发时用)

安装, 运行

 //clone
 git clone https://github.com/digimakergo/dmdemo.git

 //建议运行如下命令(只用于发布前的beta版)
 go get -u github.com/digimakergo/digimaker

 //建数据库并导入数据
 //注: 同时要修改configs/dm.yaml数据库连接信息.
 mysql -u {username} -p {database} < data/dmdemo.sql
 
 //如果是mysql8, 用root登陆mysql后运行如下: (只适用于beta版)
 SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

 //启动服务器, 注: Windows用户 - 因windows不支持命令行集成环境变量, 须把环境变量dmapp设置到dmdemo目录, 然后运行go run cmd/main.go
 dmapp=. go run cmd/main.go

访问网站

访问: http://localhost:9200

访问前台web app

   cd web/app
   npm install
   npm run build
   (或者直接 "npm start" 然后访问http://localhost:3001)

访问: http://localhost:9200/mypage (登陆信息: member/digimaker) 以下是大致截图:

运行后台(管理员界面)

   cd web/admin
   npm install
   mkdir assets ## 只是beta版   
   cp -r node_module/tinymce assets/ ## For beta version only
   npm start

查看后台: http://localhost:3000 登陆信息: admin/Digimaker

代码说明

网站, 模板

模板例子:

如何配置模板: https://digimaker.org/doc/references/template-override

模板文档: https://digimaker.org/doc/references/template

Web应用

  • Photos.tsx 演示了如何通过res api查询, 显示内容(图片)
  • Profile.tsx 演示了如何通过digimaker-ui的api显示和编辑内容(用户)
  • Login.tsx 演示了如何用认证的api来登陆

rest api: https://digimaker.org/doc/references/rest

react组件digimaker-ui: https://digimaker.org/doc/references/digimaker-ui

权限配置

所有权限的策略信息都配置在policies.json, 然后策略会通过后台界面关联到角色, 然后到用户上. policies.json可定义如下权限

  • 查询哪些类型的内容, 哪个节点下的, 作者是谁等
  • 内容操作(创建/更新/删除) : 哪些类型, 在哪个节点下, 作者是否是自己等
  • 更新哪些属性 - 属性级别的权限
  • 非内容相关的权限, 如登陆, 后台界面的左栏菜单等.

以下是个例子:

  {
    "operation": ["content/update", "content/read"],
    "limited_to": {
      "contenttype": ["article"],
      "author": "self"
    }
  },
  {
      "operation": ["content/create"],
      "limited_to": {
      "contenttype": ["image"],
      "under": [461]
   }
  }

policies配置文档: https://digimaker.org/doc/references/policies

内容模型

Digimaker首先定义内容模型, 然后根据定义的模型生成类似于ORM里的实体(entity).

内容模型定义在contenttype.json. 如果模型有更新, 可以通过运行如下命令来生成实体.

cd dmdemo
dmapp=. go run /Users/xc/go/src/github.com/digimakergo/digimaker/codegen/contenttypes/gen.go

默认会输出如下信息

Generating content entities for /Users/xc/go/src/github.com/digimakergo/dmdemo
Generating article
Generating usergroup
Generating role
Generating user
Generating image
Generating file
Generating folder
Generating frontpage

部署

项目结构

项目结构参考了go的项目布局建议: https://github.com/golang-standards/project-layout

Project A
│───cmd
│     └─main.go
│──configs    
│     │─dm.yaml
│     │─contenttype.yaml
│     │-policies.yaml
│     └ template_override.yaml
│──entity
│──handlers
│──api
│──web
│  └templates
│
└───var
  • cmd/main.go 启动文件
  • configs
    • dm.yaml: 主要配置文件
    • contenttype.yaml: 数据模型配置
    • policies.yaml: 权限策略配置
    • [可选]temlate_override.yaml (模板覆盖规则)
  • entity: 自动生成的像ORM实体
  • [可选]handlers: 回调go代码
  • [可选]fieldtype: 自定义域类型
  • [可选]web/templates: 模板
  • [可选]rest/api: 远程rest api
  • [可选]var 生成的资源(如上传的图片, 文件等), 在production建议用外部web服务器(如nginx)来托管这个文件夹