-
Notifications
You must be signed in to change notification settings - Fork 0
/
user.go
66 lines (57 loc) · 1.65 KB
/
user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package controller
import (
"net/http"
"strings"
"github.com/gin-gonic/gin"
"github.com/paudelgaurav/gin-api-permissions/constants"
"github.com/paudelgaurav/gin-api-permissions/database"
"github.com/paudelgaurav/gin-api-permissions/models"
"github.com/paudelgaurav/gin-api-permissions/utils"
)
/*
Sample post data:
{
"username": sample username,
"password": sample password,
"permissions":"can_create_users, can_update_users, can_ping",
}
*/
func CreateUser(c *gin.Context) {
var (
user models.User
permissions []string
)
if err := c.ShouldBind(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
if len(user.Permissions) > 0 {
permissions = strings.Split(user.Permissions[0], ",")
// removing unnecessary white spaces
for i := range permissions {
permissions[i] = strings.TrimSpace(permissions[i])
}
}
// removing duplicate permissions
permissions = utils.RemoveDuplicateStr(permissions)
// checking if whether permissons are valid or not
validPermissions := constants.GetAllPermissions()
if !utils.SubSet(permissions, validPermissions) {
c.JSON(http.StatusBadRequest, gin.H{"error": "invalid permission found"})
return
}
user.Permissions = permissions
if err := database.DB.Create(&user).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return
}
c.JSON(http.StatusCreated, gin.H{"msg": "created"})
}
func GetUsers(c *gin.Context) {
var users []models.User
if err := database.DB.Find(&users).Error; err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error})
return
}
c.JSON(http.StatusOK, gin.H{"users": users})
}