github.com/condensat/bank-core@v0.1.0/database/query/userrole.go (about) 1 // Copyright 2020 Condensat Tech. All rights reserved. 2 // Use of this source code is governed by a MIT 3 // license that can be found in the LICENSE file. 4 5 package query 6 7 import ( 8 "errors" 9 10 "github.com/condensat/bank-core/database" 11 "github.com/condensat/bank-core/database/model" 12 13 "github.com/jinzhu/gorm" 14 ) 15 16 var ( 17 ErrInvalidRoleName = errors.New("Invalid RoleName") 18 ) 19 20 func UserHasRole(db database.Context, userID model.UserID, role model.RoleName) (bool, error) { 21 gdb := db.DB().(*gorm.DB) 22 if db == nil { 23 return false, database.ErrInvalidDatabase 24 } 25 26 if userID == 0 { 27 return false, ErrInvalidUserID 28 } 29 30 // all users has default role 31 if role == model.RoleNameDefault { 32 return true, nil 33 } 34 35 var userRole model.UserRole 36 err := gdb. 37 Where(model.UserRole{ 38 UserID: userID, 39 Role: role, 40 }).First(&userRole).Error 41 42 if err != nil && err != gorm.ErrRecordNotFound { 43 return false, err 44 } 45 46 result := userRole.UserID == userID && userRole.Role == role 47 48 return result, nil 49 } 50 51 func UserRoles(db database.Context, userID model.UserID) ([]model.RoleName, error) { 52 gdb := db.DB().(*gorm.DB) 53 if db == nil { 54 return nil, database.ErrInvalidDatabase 55 } 56 57 if userID == 0 { 58 return nil, ErrInvalidUserID 59 } 60 61 var list []*model.UserRole 62 err := gdb.Model(&model.UserRole{}). 63 Select("role"). 64 Where(model.UserRole{ 65 UserID: userID, 66 }).Find(&list).Error 67 68 if err != nil && err != gorm.ErrRecordNotFound { 69 return nil, err 70 } 71 72 return convertRoleNames(list), nil 73 } 74 75 func convertRoleNames(list []*model.UserRole) []model.RoleName { 76 var result []model.RoleName 77 for _, curr := range list { 78 if curr != nil { 79 result = append(result, curr.Role) 80 } 81 } 82 83 return result[:] 84 }