加入权限管理

This commit is contained in:
marvzhang
2020-03-20 17:43:11 +08:00
parent 1e2b580ed4
commit fa62e1a2dc
26 changed files with 437 additions and 70 deletions

20
backend/services/auth.go Normal file
View File

@@ -0,0 +1,20 @@
package services
import (
"crawlab/constants"
"github.com/gin-gonic/gin"
"github.com/globalsign/mgo/bson"
)
func GetAuthQuery(query bson.M, c *gin.Context) bson.M {
user := GetCurrentUser(c)
if user.Role == constants.RoleAdmin {
// 获得所有数据
return query
} else {
// 只获取自己的数据
query["user_id"] = user.Id
return query
}
}

122
backend/services/clean.go Normal file
View File

@@ -0,0 +1,122 @@
package services
import (
"crawlab/constants"
"crawlab/model"
"github.com/apex/log"
"github.com/globalsign/mgo/bson"
"runtime/debug"
)
func InitTaskCleanUserIds() {
adminUser, err := GetAdminUser()
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
tasks, err := model.GetTaskList(nil, 0, constants.Infinite, "+_id")
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
for _, t := range tasks {
if !t.ScheduleId.Valid() {
t.ScheduleId = bson.ObjectIdHex(constants.ObjectIdNull)
if err := t.Save(); err != nil {
log.Errorf(err.Error())
debug.PrintStack()
continue
}
}
if !t.UserId.Valid() {
t.UserId = adminUser.Id
if err := t.Save(); err != nil {
log.Errorf(err.Error())
debug.PrintStack()
continue
}
}
}
}
func InitProjectCleanUserIds() {
adminUser, err := GetAdminUser()
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
projects, err := model.GetProjectList(nil, "+_id")
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
for _, p := range projects {
if !p.UserId.Valid() {
p.UserId = adminUser.Id
if err := p.Save(); err != nil {
log.Errorf(err.Error())
debug.PrintStack()
continue
}
}
}
}
func InitSpiderCleanUserIds() {
adminUser, err := GetAdminUser()
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
spiders, _ := model.GetSpiderAllList(nil)
for _, s := range spiders {
if !s.UserId.Valid() {
s.UserId = adminUser.Id
if err := s.Save(); err != nil {
log.Errorf(err.Error())
debug.PrintStack()
continue
}
}
}
}
func InitScheduleCleanUserIds() {
adminUser, err := GetAdminUser()
if err != nil {
log.Errorf(err.Error())
debug.PrintStack()
return
}
schedules, _ := model.GetScheduleList(nil)
for _, s := range schedules {
if !s.UserId.Valid() {
s.UserId = adminUser.Id
if err := s.Save(); err != nil {
log.Errorf(err.Error())
debug.PrintStack()
continue
}
}
}
}
func InitCleanService() error {
if model.IsMaster() {
// 清理任务UserIds
InitTaskCleanUserIds()
// 清理项目UserIds
InitProjectCleanUserIds()
// 清理爬虫UserIds
InitSpiderCleanUserIds()
// 清理定时任务UserIds
InitScheduleCleanUserIds()
}
return nil
}

View File

@@ -545,6 +545,9 @@ func InitSpiderService() error {
if err := GitCron.Start(); err != nil {
return err
}
// 清理UserId
InitSpiderCleanUserIds()
}
return nil

View File

@@ -120,3 +120,11 @@ func GetCurrentUser(c *gin.Context) *model.User {
func GetCurrentUserId(c *gin.Context) bson.ObjectId {
return GetCurrentUser(c).Id
}
func GetAdminUser() (user *model.User, err error) {
u, err := model.GetUserByUsername("admin")
if err != nil {
return user, err
}
return &u, nil
}