<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: wenjianzhang</title>
    <description>The latest articles on Forem by wenjianzhang (@wenjianzhang).</description>
    <link>https://forem.com/wenjianzhang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F353207%2F8de92c7b-86b1-4172-a1f8-a2dea1baacfe.png</url>
      <title>Forem: wenjianzhang</title>
      <link>https://forem.com/wenjianzhang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/wenjianzhang"/>
    <language>en</language>
    <item>
      <title>Gin + Vue + Element UI based front-end and back-end separated permission management system</title>
      <dc:creator>wenjianzhang</dc:creator>
      <pubDate>Fri, 20 Mar 2020 13:32:02 +0000</pubDate>
      <link>https://forem.com/wenjianzhang/gin-vue-element-ui-based-front-end-and-back-end-separated-permission-management-system-59ob</link>
      <guid>https://forem.com/wenjianzhang/gin-vue-element-ui-based-front-end-and-back-end-separated-permission-management-system-59ob</guid>
      <description>&lt;h1&gt;
  
  
  go-admin
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HGCupC3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/wenjianzhang/go-admin/workflows/build/badge.svg%3Fbranch%3Dmaster" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HGCupC3k--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://github.com/wenjianzhang/go-admin/workflows/build/badge.svg%3Fbranch%3Dmaster" alt="build"&gt;&lt;/a&gt;   &lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RvH1tCiy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.shields.io/github/license/mashape/apistatus.svg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RvH1tCiy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://img.shields.io/github/license/mashape/apistatus.svg" alt="license"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/wenjianzhang/go-admin"&gt;project address&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Gin + Vue + Element UI based front-end and back-end separated permission management system
&lt;/h5&gt;

&lt;h2&gt;
  
  
  ✨ Feature
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Follow RESTful API design specifications&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provides rich middleware support based on GIN WEB API framework (user authentication, cross domain, access log, tracking ID, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Casbin-based RBAC access control model&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JWT certification&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Support Swagger documentation (based on swaggo)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;GORM-based database storage that can expand many types of databases&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simple model mapping of configuration files to quickly get the desired configuration&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TODO: unit test&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🎁 Built-in functions
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt; User management: The user is the system operator. This function mainly completes the system user configuration.&lt;/li&gt;
&lt;li&gt; Department management: configure the system organization (company, department, group), and display the tree structure to support data permissions.&lt;/li&gt;
&lt;li&gt; Post management: Configure system users to hold positions.&lt;/li&gt;
&lt;li&gt; Menu management: configure system menus, operation permissions, button permission labels, etc.&lt;/li&gt;
&lt;li&gt; Role management: role menu permissions assignment, setting roles to divide data range permissions by organization.&lt;/li&gt;
&lt;li&gt; Dictionary management: to maintain some fixed data often used in the system.&lt;/li&gt;
&lt;li&gt; Parameter management: Dynamically configure common parameters for the system.&lt;/li&gt;
&lt;li&gt; Operation log: system normal operation log record and query; system exception information log record and query.&lt;/li&gt;
&lt;li&gt; Login log: The system login log record query contains login exceptions.&lt;/li&gt;
&lt;li&gt;System interface: Automatically generate related api interface documents according to business code.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Configuration details
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Configuration file description
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;settings&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;application&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  
    &lt;span class="c1"&gt;# Project launch environment         &lt;/span&gt;
    &lt;span class="na"&gt;env&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dev&lt;/span&gt;  
    &lt;span class="c1"&gt;# When env: demo, prompts for request operations other than GET&lt;/span&gt;
    &lt;span class="na"&gt;envmsg&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;谢谢您的参与，但为了大家更好的体验，所以本次提交就算了吧！"&lt;/span&gt; 
    &lt;span class="c1"&gt;# Host IP or domain name, default 0.0.0.0&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0&lt;/span&gt; 
    &lt;span class="c1"&gt;# Whether to initialize the database structure and basic data; true: required; false: not required&lt;/span&gt;
    &lt;span class="na"&gt;isinit&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;  
    &lt;span class="c1"&gt;# JWT encrypted string&lt;/span&gt;
    &lt;span class="na"&gt;jwtsecret&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;123abc&lt;/span&gt;  
    &lt;span class="c1"&gt;# log storage path&lt;/span&gt;
    &lt;span class="na"&gt;logpath&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;temp/logs/log.log&lt;/span&gt;   
    &lt;span class="c1"&gt;# application name&lt;/span&gt;
    &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go-admin&lt;/span&gt;   
    &lt;span class="c1"&gt;# application port&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;8000&lt;/span&gt;   
    &lt;span class="na"&gt;readtimeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1&lt;/span&gt;   
    &lt;span class="na"&gt;writertimeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2&lt;/span&gt; 
  &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# database name&lt;/span&gt;
    &lt;span class="na"&gt;database&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dbname&lt;/span&gt; 
    &lt;span class="c1"&gt;# database type&lt;/span&gt;
    &lt;span class="na"&gt;dbtype&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;mysql&lt;/span&gt;    
    &lt;span class="c1"&gt;# database host&lt;/span&gt;
    &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;127.0.0.1&lt;/span&gt;  
    &lt;span class="c1"&gt;# database  password&lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;  
    &lt;span class="c1"&gt;# database port&lt;/span&gt;
    &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;3306&lt;/span&gt;       
    &lt;span class="c1"&gt;# database username&lt;/span&gt;
    &lt;span class="na"&gt;username&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;   
  &lt;span class="na"&gt;redis&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="c1"&gt;# redis addresss&lt;/span&gt;
    &lt;span class="na"&gt;addr&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.0.0.0:6379&lt;/span&gt; 
    &lt;span class="c1"&gt;# db &lt;/span&gt;
    &lt;span class="na"&gt;db&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0&lt;/span&gt;   
    &lt;span class="c1"&gt;# password            &lt;/span&gt;
    &lt;span class="na"&gt;password&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;password&lt;/span&gt;  
    &lt;span class="c1"&gt;# read timeout&lt;/span&gt;
    &lt;span class="na"&gt;readtimeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;50&lt;/span&gt;     
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;file path  go-admin/config/settings.yml&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  📦 evelopment
&lt;/h2&gt;

&lt;p&gt;First start instructions&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Get the code&lt;/span&gt;
git clone https://github.com/wenjianzhang/go-admin.git

&lt;span class="c"&gt;# Enter working path&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ./go-admin

&lt;span class="c"&gt;# Build the project&lt;/span&gt;
go build

&lt;span class="c"&gt;# Change setting&lt;/span&gt;
vi ./config/setting.yml &lt;span class="o"&gt;(&lt;/span&gt;Note: Change isinit and database connection&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# 1. Database information in the configuration file&lt;/span&gt;
&lt;span class="c"&gt;# Note: the corresponding configuration data under settings.database&lt;/span&gt;
&lt;span class="c"&gt;# 2. Confirm database initialization parameters&lt;/span&gt;
&lt;span class="c"&gt;# Note: If this is the first time settings.application.isinit is set, please set the current value to true, the system will automatically initialize the database structure and basic data information;&lt;/span&gt;
&lt;span class="c"&gt;# 3. Confirm the log path&lt;/span&gt;


&lt;span class="c"&gt;# Start the project or debug with the IDE&lt;/span&gt;
./go-admin

&lt;span class="c"&gt;# See also instructions in WIKI&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Document generation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;swag init  
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If there is no &lt;code&gt;swag&lt;/code&gt; command go get installed&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;go get &lt;span class="nt"&gt;-u&lt;/span&gt; github.com/swaggo/swag/cmd/swag
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Cross compilation&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;env &lt;/span&gt;&lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;windows &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 go build main.go

&lt;span class="c"&gt;# or&lt;/span&gt;

&lt;span class="nb"&gt;env &lt;/span&gt;&lt;span class="nv"&gt;GOOS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;linux &lt;span class="nv"&gt;GOARCH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;amd64 go build main.go
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  🔗 Online Demo
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;admin  /  123456&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Demo address：&lt;a href="http://www.zhangwj.com/#/login"&gt;http://www.zhangwj.com&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Open source projects used
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/gin-gonic/gin"&gt;gin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/casbin/casbin"&gt;casbin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/spf13/viper"&gt;spf13/viper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/jinzhu/gorm"&gt;gorm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/swaggo/gin-swagger"&gt;gin-swagger&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/dgrijalva/jwt-go"&gt;jwt-go&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/PanJiaChen/vue-element-admin"&gt;vue-element-admin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://gitee.com/y_project/RuoYi-Vue"&gt;ruoyi-vue&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Version
&lt;/h2&gt;

&lt;h4&gt;
  
  
  2020-03-15 New Features and Optimization
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;Add user avatar upload&lt;/li&gt;
&lt;li&gt;Add user password modification&lt;/li&gt;
&lt;li&gt;Operation log page adjustment&lt;/li&gt;
&lt;li&gt;Optimize captcha background color&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I saw a lot of friends who experience the wrong verification code, so I adjusted the contrast for everyone to experience!&lt;/p&gt;

&lt;h2&gt;
  
  
  🤝 Thanks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/chengxiao"&gt;chengxiao&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  License
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/wenjianzhang/go-admin/blob/master/LICENSE.md"&gt;MIT&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copyright (c) 2020 wenjianzhang&lt;/p&gt;

</description>
      <category>go</category>
      <category>vue</category>
    </item>
  </channel>
</rss>
