GRABC beego框架的rabc权限管理插件

最近抽时间写了一个beego框架的rabc插件。这个插件包括路由、权限、角色、用户角色绑定的功能。路由功能会自动扫描controller里面的方法,然后根据需要将路由授权给权限,权限授权给角色,角色分配给用户。grabc功能简单实用,在beego框架中安装只需要不到20行的代码,即可实现rabc的功能。

安装:

go get github.com/codyi/grabc

配置:

第一步:在你项目中的数据库中导入rabc.sql,生成对应数据表

第二步:在项目中引入grabc库(可以在项目中的main.go或router.go中引入)

在router.go或main.go中配置如下:

//引入grabc库
import "github.com/codyi/grabc"
func init() {
	//将路由注册到grabc,用于反射出对应的网址
	grabc.RegisterController(&controllers.SiteController{})
	grabc.RegisterController(&controllers.UserController{})
	//注册用户系统模型到grabc,用于用户ID和grabc插件绑定
	//注意:注册的这个用户模型,需要实现IUserModel中的方法
	grabc.RegisterUserModel(&models.User{})
	//增加忽律权限检查的页面
	grabc.AppendIgnoreRoute("site", "login")
	//403页面地址注册到grabc中,用于grabc插件禁止权限的页面跳转
	grabc.Http_403("/site/nopermission")
	//设置模板,为了让grabc更具有通用性,可以设置模板
	//目前设置模板只支持传入模板的内容
	grabc.SetLayout(libs.Grabc_layout, nil)
}

添加好上面的配置之后,剩下就是在controller中增加权限判了,个人建议做一个BaseController,然后每个controller都继承这个base,然后在BaseController中的方法中增加grabc的权限检查,这样每个controller在请求之前都会先检查权限~~

BaseController.go中Prepare方法中配置如下

//注册当前登录的用户,注意:user需要继承IUserIdentify接口
grabc.RegisterIdentify(user)

if !grabc.CheckAccess(this.controllerName, this.actionName) {
	this.redirect(this.URLFor("SiteController.NoPermission"))
}

到此grabc的功能都加完了,是不是很简单~~~

注意:增加完权限判断之后,会发现很多页面都不能访问了,那么就在router.go或main.go中增加如下代码

grabc.AppendIgnoreRoute("*", "*")

以上grabc将会忽律所有的权限检查,这时候需要去/route/index中增加路由,然后添加权限,角色和用户分配,都配置好之后,就可以将grabc.AppendIgnoreRoute(“*”, “*”)代码删掉,然后重启项目~~权限起作用了,是不是很简单~~

接口说明

IUserModel接口

//用于定义用户model
type IUserModel interface {
	//用户列表返回可用用户的id和姓名
	//参数:pageIndex 分页的页数
	//参数:pageCount 每页显示的用户数量
	//返回值:userList [用户ID]用户姓名,用户列表展示
	//返回值:totalNum 全部的用户数目,用于计算分页的数量
	//返回值:err
	UserList(pageIndex, pageCount int) (userList map[int]string, totalNum int, err error)
	//根据用户ID获取用户姓名
	FindNameById(id int) string 
}
IUserIdentify接口

type IUserIdentify interface {
	GetId() int //返回当前登录用户的ID
}

更过详细文档请访问:https://github.com/codyi/grabc

bower简明入门教程

什么是bower

Bower是twitter 推出的一款包管理工具,它可用于搜索、安装和卸载如JavaScript、HTML、CSS之类的网络资源。

MAC安装bower

brew install bower

PS:brew安装会自行安装bower需要的依赖环境,如果本机安装了node和git环境,也可以通过下面的命令安装

npm install -g bower

安装完之后输入如下命令

bower -help

会出现如下的截图WechatIMG61

bower初始化

先看一下我本机的目录

WechatIMG62

在bower目录下创建.bowerrc文件,并在文件中添加如下内容

{
	"directory" : "bower_extensions"
}

然后执行初始化命令

bower init

然后根据提示输入对应的内容~~最后会生成bower.json文件,里面保存的就是刚才输入的信息。WechatIMG63

包的安装

下面我们来安装第一个js包,输入如下命令:

bower install jquery

这时候就会在刚才设置的目录中保存了jquery的文件~~ 注意下面的命令,会在bower.json文件中dependencies的节点保存一行刚才安装的jquery信息

bower install jquery --save

当然也可以通过下面的方式安装

# installs the project dependencies listed in bower.json
$ bower install
# registered package
$ bower install jquery
# GitHub shorthand
$ bower install desandro/masonry
# Git endpoint
$ bower install git://github.com/user/package.git
# URL
$ bower install http://example.com/script.js

 包的更新

上面安装的是最新版的高版本jquery,假如想要兼容低版本浏览器的呢?
已经查到兼容低版本浏览器的jquery版本为1.11.3,下面直接修改bower.json文件中的jquery版本号如下:

  "dependencies": {
    "jquery": "~1.11.3"
  }

然后执行如下命令

bower update

这时候,刚才下载的jquery就已经换成1.11.3的版本了~~

其它命令

bower info jquery   包的信息查看
bower search bootstrap  包的查找
bower uninstall jquery   包的删除
bower home 打开在bower.json中设置的homepage

更多详细的命令,请访问官方文档~~https://bower.io/docs/api/

xcrun: error: invalid active developer path

在mac terminal执行如下命令

go get -u github.com/beego/bee

出现如下错误

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

可能是由于xcode问题造成的,可在终端中执行如下命令

xcode-select --install

会出现如下截图,点击安装

417876-20170113182417822-1549874205

然后在执行刚才的命令试试~~

MAC OS Sublime Text 3 Golang 配置

在看本文的前提,Go的环境一定是安装好的~~没有安装Go环境先安装Go

Sublime Text 3也要提前安装好,可以去Sublime Text3官网下载~~官网地址:https://www.sublimetext.com/

打开Sublime Text 3同时输入

 Ctrl + `

这时候Sublime Text3将出现如下界面

WechatIMG45

在最下面的输入框将下面的命令复制进去,然后回车

import  urllib.request,os;pf='Package Control.sublime-package';ipp=sublime.installed_packages_path();urllib.request.install_opener(urllib.request.build_opener(urllib.request.ProxyHandler()));open(os.path.join(ipp,pf),'wb').write(urllib.request.urlopen('http://sublime.wbond.net/'+pf.replace(' ','%20')).read())

安装完成后会出现如下菜单WechatIMG46

安装完成之后,就需要安装Sublime的插件了,Ctrl + Commd + p 打开Pack Controll 然后输入pcip(即“Package Control: Install Package”的缩写)回车WechatIMG47

过一会将出现如下截图

WechatIMG48

这时候在输入框中输入:GoSublime将在下面列表中出现选项(注意:如果已经安装过,将不再显示),然后选中GoSublime回车,注意看Sublime Text3左下角,左下角将显示安装的进度。PS:同理继续安装:SidebarEnhancements和Go Build

安装GoCode,在shell中执行下面命令

go get -u github.com/nsf/gocode

都安装完之后,重启Sublime Text3,这时候打开go的源文件代码,看看是不是代码高亮了,而且输入也有了代码提示~~~

PS:在Sublime Text3中执行编译源文件,需要在系统中设置好GOBIN和GOPATH,如果按住Command+b不能运行,那么在Sublime Text3中重新配置,按照下面的截图打开配置文件

WechatIMG49

 

然后输入下面的配置,然后再试试Command+b~~

{
    "GOBIN": "你本机的GOBIN目录",
    "GOPATH": "你本机的GOPATH目录"
}

Warning: Using a password on the command line interface can be insecure.

mysql5.6版本在执行mysqldump自动化备份的时候,由于脚本是自动化运行,所以必须在shell中写入mysql用户的密码,但是执行之后,出现如下错误:

Warning: Using a password on the command line interface can be insecure.

原因是5.6之后密码写在命令行不安全,解决方案是将用户名密码卸载配置文件中

vi /etc/my.cnf

在my.cnf中增加如下代码

[mysqldump]
host=localhost
user=username
password='password'

再次执行备份命令如下

mysqldump yourdatabase > database.sql

 

mac brew 常用命令

查看brew的帮助

brew –help

安装软件

brew install git

卸载软件

brew uninstall git

搜索软件

brew search git

显示已经安装软件列表

brew list

更新软件,把所有的Formula目录更新,并且会对本机已经安装并有更新的软件用*标明。

brew update

更新某具体软件

brew upgrade git

删除程序,单个软件删除和所有程序老版删除

brew cleanup git 
brew cleanup

查看那些已安装的程序需要更新

brew outdated

显示包依赖

brew deps *

添加更多仓库,默认情况下tap 假设这些仓库来源于github,但又不局限于它。

不带参数的话,将会列出当前已经tapped 的仓库,比如:

brew tap

添加具体的源

brew tap homebrew/php

删除具体的源

brew untap homebrew/php

brew自检

brew doctor

 

 

 

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

centos6.5环境 yum 安装nginx后(版本nginx1.10.1)

启动报错:

nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by protocol)

解决办法:

vim /etc/nginx/conf.d/default.conf

listen       80 default_server;
listen       [::]:80 default_server;

改为:

listen       80;
#listen       [::]:80 default_server;

启动nginx就行了。。

centos 7 install mysql 5.7

获取源

wget http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

增加源

yum localinstall mysql57-community-release-el7-7.noarch.rpm

安装mysql

yum install mysql-community-server

启动数据库

 systemctl start  mysqld.service

安装完了root密码在mysql的log中,进入到/var/log目录中

more mysqld.log | grep "temporary password is generated"

这时候就会出现mysql root的初始密码了。。。记得更改一下

 

 

Could not locate Gemfile

犹豫中国伟大的防火墙,导致在执行bundle命令就到一半挂掉了,然后在执行命令就提示

Could not locate Gemfile

上网搜了一会,是因为缺少Gemfile文件。后来执行

bundle -h

命令发现,可以生成一个新的Gemfile文件,命令是:

bundle init

问题解决~~

 

Git 版本管理

Git是一款免费、开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。

Git 是用于 Linux内核开发的版本控制工具。与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持,使源代码的发布和交流极其方便。 Git 的速度很快。

Git flow 工作流

  • master 主要分支,存放对外发布的版本,任何时候这个分支,都是稳定的分布版
  • develop日常开发,存放最新的开发版
  • release  预发布分支
  • hotfix  紧急修复分支
  • feature 功能分支

master分支

最基础,最稳定的分支。存放对外发布的版本,任何时候这个分支,都是稳定的分布版,即可以随时对外发布的分支。****任何时候,不能再master分支上做代码修改***

develop分支

开发分支,最初从master复制过来。日常存放的是最新的开发,也是随时准备生成release版本的代码。****除非紧急情况,否则不能再develop分支上做代码修改***

release分支

预发布分支,是从develop clone过来。准备合并到master分支的代码。****除非紧急情况,否则不能再release分支上做代码修改***

feature分支

功能分支,从develop clone过来。主要用于在项目新增加一个功能的时候产生,等功能开发、测试完成后,合并到develop,对应的功能分支删除。****功能分支要每天合并develop代码***

hotfix分支

紧急修复分支,主要在线上版本出现问题,从master派生过来,问题修复完成,hotfix分支功能关闭,代码合并到master、develop。

这几个分支关系,如下图:

git-model@2x

 

git 常用命令

  • 克隆(clone):从远程仓库URL加载创建一个与远程仓库一样的本地仓库
  • 提交(commit):将暂存文件上传到本地仓库
  •  检出(checkout):切换不同分支
  • 添加(add):添加文件到缓存区
  • 暂存(git stash):保存工作现场
  • 重置(reset):回到最近添加(add)/提交(commit)状态
  • 标签(tag):给项目增添标签
  • 合并(merge):将多个同名文件合并为一个文件,该文件包含多个同名文件的所有内容,相同内容抵消
  • 抓取(fetch):从远程仓库获取信息并同步至本地仓库
  • 拉取(pull):从远程仓库获取信息并同步至本地仓库,并且自动执行合并(merge)操作,即 pull=fetch+merge
  • 推送(push):将本地仓库同步至远程仓库,一般推送前先拉取一次,确保一致
  •  分支(branch):创建/修改/删除分枝

centos安装jenkins

Jenkins是开源的Java编写的持续集成的工具,在Centos上可以通过yum命令行直接安装。

安装Java

看到当前系统java版本。

java -version

如果java不存在运行命令:

sudo yum install java

如果java不存在可以安装java,如果java存在可以升级java。

安装Jenkins

添加Jenkins源:

sudo wget -O /etc/yum.repos.d/jenkins.repo http://jenkins-ci.org/redhat/jenkins.repo 
sudo rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

安装Jenkins:

yum install jenkins

启动Jenkins

输入命令启动Jenkins:

sudo service jenkins start

在浏览器中输入:http://127.0.0.1:8080/ 就可以使用jenkins了,如果没有UI系统可以在其他的浏览器中输入http://<所在机器的ip>:8080/进入Jenkins界面 。

sudo service jenkins stop

可以停止Jenkins服务。

相关配置

Jenkins安装目录:

cd /usr/lib/jenkins/

Jenkins配置文件:

cd /etc/sysconfig

Jenkins的配置文件在这里,名字是jenkins

cat jenkins

可以查看jenkins默认的配置。这里介绍下三个比较重要的配置目录JENKINS_HOME ,JENKINS_USER ,JENKINS_PORT

## Path:        Development/Jenkins
## Description: Jenkins Continuous Integration Server
## Type:        string
## Default:     "/var/lib/jenkins"
## ServiceRestart: jenkins
#
# Directory where Jenkins store its configuration and working
# files (checkouts, build reports, artifacts, ...).
#
JENKINS_HOME="/var/lib/jenkins"

Jenkins储存文件的地址,Jenkins的插件,生成的文件都会放在这里。

## Type:        string
## Default:     "jenkins"
## ServiceRestart: jenkins
#
# Unix user account that runs the Jenkins daemon
# Be careful when you change this, as you need to update
# permissions of $JENKINS_HOME and /var/log/jenkins.
#
JENKINS_USER="jenkins"

Jenkins使用的用户,默认为jenkins 

## Type:        integer(0:65535)
## Default:     8080
## ServiceRestart: jenkins
#
# Port Jenkins is listening on.
# Set to -1 to disable
#
JENKINS_PORT="8080"

Jenkins的端口,默认端口是8080。

 

删除软连接

在用ln -s 创建软连接之后,删除软连接的方法

rm symbolic_name

注意不要加-rf参数,如果加了不要在连接后面加斜线。如:rm -rf symbolic_name/  切记注意不要加后面的斜线,否则会把连接目录下的文件都删掉。。