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  }