feat:实现团队功能

This commit is contained in:
lifei6671
2018-11-05 18:50:01 +08:00
parent 1d8d74afb1
commit b897c87476
20 changed files with 1411 additions and 208 deletions

View File

@@ -27,24 +27,30 @@ const PageSize = 10
// 用户权限
const (
// 超级管理员.
MemberSuperRole = 0
MemberSuperRole SystemRole = iota
//普通管理员.
MemberAdminRole = 1
MemberAdminRole
//普通用户.
MemberGeneralRole = 2
MemberGeneralRole
)
//系统角色
type SystemRole int
const (
// 创始人.
BookFounder = 0
BookFounder BookRole = iota
//管理者
BookAdmin = 1
BookAdmin
//编辑者.
BookEditor = 2
BookEditor
//观察者
BookObserver = 3
BookObserver
)
//项目角色
type BookRole int
const (
LoggerOperate = "operate"
LoggerSystem = "system"
@@ -68,8 +74,8 @@ var (
ConfigurationFile = "./conf/app.conf"
WorkingDirectory = "./"
LogFile = "./runtime/logs"
BaseUrl = ""
AutoLoadDelay = 0
BaseUrl = ""
AutoLoadDelay = 0
)
// app_key
@@ -139,40 +145,45 @@ func GetUploadFileSize() int64 {
}
return 0
}
//是否启用导出
func GetEnableExport() bool {
return beego.AppConfig.DefaultBool("enable_export",true)
return beego.AppConfig.DefaultBool("enable_export", true)
}
//同一项目导出线程的并发数
func GetExportProcessNum() int {
exportProcessNum := beego.AppConfig.DefaultInt("export_process_num",1)
exportProcessNum := beego.AppConfig.DefaultInt("export_process_num", 1)
if exportProcessNum <= 0 || exportProcessNum > 4 {
exportProcessNum = 1
}
return exportProcessNum;
}
//导出项目队列的并发数量
func GetExportLimitNum() int {
exportLimitNum := beego.AppConfig.DefaultInt("export_limit_num",1)
exportLimitNum := beego.AppConfig.DefaultInt("export_limit_num", 1)
if exportLimitNum < 0 {
exportLimitNum = 1
}
return exportLimitNum;
}
//等待导出队列的长度
func GetExportQueueLimitNum() int {
exportQueueLimitNum := beego.AppConfig.DefaultInt("export_queue_limit_num",10)
exportQueueLimitNum := beego.AppConfig.DefaultInt("export_queue_limit_num", 10)
if exportQueueLimitNum <= 0 {
exportQueueLimitNum = 100
}
return exportQueueLimitNum
}
//默认导出项目的缓存目录
func GetExportOutputPath() string {
exportOutputPath := filepath.Join(beego.AppConfig.DefaultString("export_output_path", filepath.Join(WorkingDirectory,"cache")),"books")
exportOutputPath := filepath.Join(beego.AppConfig.DefaultString("export_output_path", filepath.Join(WorkingDirectory, "cache")), "books")
return exportOutputPath
}
@@ -187,7 +198,7 @@ func IsAllowUploadFileExt(ext string) bool {
for _, item := range exts {
if item == "*" {
return true
return true
}
if strings.EqualFold(item, ext) {
return true
@@ -198,42 +209,42 @@ func IsAllowUploadFileExt(ext string) bool {
//重写生成URL的方法加上完整的域名
func URLFor(endpoint string, values ...interface{}) string {
baseUrl := beego.AppConfig.DefaultString("baseurl","")
baseUrl := beego.AppConfig.DefaultString("baseurl", "")
pathUrl := beego.URLFor(endpoint, values ...)
if baseUrl == "" {
baseUrl = BaseUrl
}
if strings.HasPrefix(pathUrl,"http://") {
if strings.HasPrefix(pathUrl, "http://") {
return pathUrl
}
if strings.HasPrefix(pathUrl,"/") && strings.HasSuffix(baseUrl,"/") {
if strings.HasPrefix(pathUrl, "/") && strings.HasSuffix(baseUrl, "/") {
return baseUrl + pathUrl[1:]
}
if !strings.HasPrefix(pathUrl,"/") && !strings.HasSuffix(baseUrl,"/") {
if !strings.HasPrefix(pathUrl, "/") && !strings.HasSuffix(baseUrl, "/") {
return baseUrl + "/" + pathUrl
}
return baseUrl + beego.URLFor(endpoint, values ...)
return baseUrl + beego.URLFor(endpoint, values ...)
}
func URLForWithCdnImage(p string) string {
func URLForWithCdnImage(p string) string {
if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
return p
}
cdn := beego.AppConfig.DefaultString("cdnimg", "")
//如果没有设置cdn则使用baseURL拼接
if cdn == "" {
baseUrl := beego.AppConfig.DefaultString("baseurl","")
baseUrl := beego.AppConfig.DefaultString("baseurl", "")
if baseUrl == "" {
baseUrl = BaseUrl
}
if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") {
if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
return baseUrl + p[1:]
}
if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") {
if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
return baseUrl + "/" + p
}
return baseUrl + p
return baseUrl + p
}
if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
return cdn + string(p[1:])
@@ -244,29 +255,29 @@ func URLForWithCdnImage(p string) string {
return cdn + p
}
func URLForWithCdnCss (p string,v ...string) string {
func URLForWithCdnCss(p string, v ...string) string {
cdn := beego.AppConfig.DefaultString("cdncss", "")
if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
return p
}
filePath := WorkingDir(p)
if f,err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
p = p + fmt.Sprintf("?v=%s" , f.ModTime().Format("20060102150405"))
if f, err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
p = p + fmt.Sprintf("?v=%s", f.ModTime().Format("20060102150405"))
}
//如果没有设置cdn则使用baseURL拼接
if cdn == "" {
baseUrl := beego.AppConfig.DefaultString("baseurl","")
baseUrl := beego.AppConfig.DefaultString("baseurl", "")
if baseUrl == "" {
baseUrl = BaseUrl
}
if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") {
if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
return baseUrl + p[1:]
}
if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") {
if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
return baseUrl + "/" + p
}
return baseUrl + p
return baseUrl + p
}
if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
return cdn + string(p[1:])
@@ -277,7 +288,7 @@ func URLForWithCdnCss (p string,v ...string) string {
return cdn + p
}
func URLForWithCdnJs(p string,v ...string) string {
func URLForWithCdnJs(p string, v ...string) string {
cdn := beego.AppConfig.DefaultString("cdnjs", "")
if strings.HasPrefix(p, "http://") || strings.HasPrefix(p, "https://") {
return p
@@ -285,23 +296,23 @@ func URLForWithCdnJs(p string,v ...string) string {
filePath := WorkingDir(p)
if f,err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
p = p + fmt.Sprintf("?v=%s" , f.ModTime().Format("20060102150405"))
if f, err := os.Stat(filePath); err == nil && !strings.Contains(p, "?") && len(v) > 0 && v[0] == "version" {
p = p + fmt.Sprintf("?v=%s", f.ModTime().Format("20060102150405"))
}
//如果没有设置cdn则使用baseURL拼接
if cdn == "" {
baseUrl := beego.AppConfig.DefaultString("baseurl","")
baseUrl := beego.AppConfig.DefaultString("baseurl", "")
if baseUrl == "" {
baseUrl = BaseUrl
}
if strings.HasPrefix(p,"/") && strings.HasSuffix(baseUrl,"/") {
if strings.HasPrefix(p, "/") && strings.HasSuffix(baseUrl, "/") {
return baseUrl + p[1:]
}
if !strings.HasPrefix(p,"/") && !strings.HasSuffix(baseUrl,"/") {
if !strings.HasPrefix(p, "/") && !strings.HasSuffix(baseUrl, "/") {
return baseUrl + "/" + p
}
return baseUrl + p
return baseUrl + p
}
if strings.HasPrefix(p, "/") && strings.HasSuffix(cdn, "/") {
return cdn + string(p[1:])
@@ -314,19 +325,19 @@ func URLForWithCdnJs(p string,v ...string) string {
func WorkingDir(elem ...string) string {
elems := append([]string{ WorkingDirectory },elem...)
elems := append([]string{WorkingDirectory}, elem...)
return filepath.Join(elems...)
}
func init() {
if p,err := filepath.Abs("./conf/app.conf"); err == nil {
func init() {
if p, err := filepath.Abs("./conf/app.conf"); err == nil {
ConfigurationFile = p
}
if p,err := filepath.Abs("./"); err == nil {
if p, err := filepath.Abs("./"); err == nil {
WorkingDirectory = p
}
if p,err := filepath.Abs("./runtime/logs"); err == nil {
if p, err := filepath.Abs("./runtime/logs"); err == nil {
LogFile = p
}
}
}