add isPermissionMethod #8

Merged
lqhoang99 merged 6 commits from feature/isPermission into master 2021-11-11 10:07:15 +00:00
lqhoang99 commented 2021-11-10 09:54:26 +00:00 (Migrated from github.com)
No description provided.
namhq1989 (Migrated from github.com) reviewed 2021-11-10 10:06:45 +00:00
namhq1989 (Migrated from github.com) commented 2021-11-10 10:06:45 +00:00

sai text

sai text
namhq1989 (Migrated from github.com) reviewed 2021-11-10 10:10:07 +00:00
namhq1989 (Migrated from github.com) left a comment

check

check
@ -322,0 +334,4 @@
logger.Error("usermngmt - HasPermission: email or password cannot be empty", logger.LogData{
"userID": userID,
"permission": permission,
})
namhq1989 (Migrated from github.com) commented 2021-11-10 10:09:57 +00:00

func này muốn nhanh thì làm thêm in-memory cache (https://github.com/allegro/bigcache) như sau:

  • init thì call func A query hết role và permission ra lưu vào mem
  • khi có thay đổi (CRUD) thì call lại func A
  • khi cần check thì chỉ cần lấy từ mem lên để check
func này muốn nhanh thì làm thêm in-memory cache (https://github.com/allegro/bigcache) như sau: - init thì call func A query hết role và permission ra lưu vào mem - khi có thay đổi (CRUD) thì call lại func A - khi cần check thì chỉ cần lấy từ mem lên để check
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 03:20:41 +00:00
@ -322,0 +334,4 @@
logger.Error("usermngmt - HasPermission: email or password cannot be empty", logger.LogData{
"userID": userID,
"permission": permission,
})
lqhoang99 (Migrated from github.com) commented 2021-11-11 03:20:41 +00:00

done

done
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 03:20:46 +00:00
lqhoang99 (Migrated from github.com) commented 2021-11-11 03:20:46 +00:00

done

done
namhq1989 (Migrated from github.com) reviewed 2021-11-11 03:53:12 +00:00
@ -51,3 +56,4 @@
//
// Role
//
namhq1989 (Migrated from github.com) commented 2021-11-11 03:53:12 +00:00

gom code if

gom code if
namhq1989 (Migrated from github.com) reviewed 2021-11-11 04:08:21 +00:00
namhq1989 (Migrated from github.com) left a comment

check

check
namhq1989 (Migrated from github.com) commented 2021-11-11 03:54:47 +00:00

đặt constant phía trên luôn

const cacheTime = 24 * 30 * time.Hour // 30 days
đặt constant phía trên luôn ```go const cacheTime = 24 * 30 * time.Hour // 30 days ```
namhq1989 (Migrated from github.com) commented 2021-11-11 04:02:49 +00:00

không nên làm ntn, vì call db khá nhiều

  1. khai báo struct để lưu
type CachedRoles struct {
  Role string `json:"role"`
  IsAdmin bool `json:"isAdmin"`
  Permissions []string `json:"permissions"`
}
  1. dùng 2 query để lấy hết roles và permissions ra (dùng code sẽ tiết kiệm hơn query db nhiều lần)
  2. for roles, for tiếp permissions để gom lại thành 1 mảng theo struct trên
  3. lưu xuống mem cache
không nên làm ntn, vì call db khá nhiều 1. khai báo struct để lưu ```go type CachedRoles struct { Role string `json:"role"` IsAdmin bool `json:"isAdmin"` Permissions []string `json:"permissions"` } ``` 2. dùng 2 query để lấy hết roles và permissions ra (dùng code sẽ tiết kiệm hơn query db nhiều lần) 3. for roles, for tiếp permissions để gom lại thành 1 mảng theo struct trên 4. lưu xuống mem cache
@ -322,0 +368,4 @@
}
if _, isValid := funk.FindString(cachedRole.Permissions, func(s string) bool {
return s == permission
}); isValid {
namhq1989 (Migrated from github.com) commented 2021-11-11 04:06:38 +00:00

chỗ này thiếu

  1. trong package cache phải có 1 hàm GetCachedRoles trả về CachedRoles, trong hàm đó nếu check cachedRoles = nil thì phải call hàm Roles để tạo cache mới
  2. ở chỗ này gọi hàm GetCachedRoles
  3. dựa vào user.RoleID để pick ra data của role đó, sau đó check mảng permission

2 bước 2,3 nên đưa ra 1 func checkUserHasPermissionFromCache để làm cho gọn code

chỗ này thiếu 1. trong package ` cache` phải có 1 hàm `GetCachedRoles` trả về `CachedRoles`, trong hàm đó nếu check `cachedRoles = nil` thì phải call hàm `Roles` để tạo cache mới 2. ở chỗ này gọi hàm `GetCachedRoles` 3. dựa vào user.RoleID để pick ra data của role đó, sau đó check mảng permission ---- 2 bước 2,3 nên đưa ra 1 func `checkUserHasPermissionFromCache` để làm cho gọn code
@ -54,6 +55,9 @@ func Init(config Config) (*Service, error) {
return nil, err
namhq1989 (Migrated from github.com) commented 2021-11-11 04:07:25 +00:00

func này gọi trong hàm Init của cache luôn

func này gọi trong hàm Init của `cache` luôn
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 08:16:32 +00:00
@ -54,6 +55,9 @@ func Init(config Config) (*Service, error) {
return nil, err
lqhoang99 (Migrated from github.com) commented 2021-11-11 08:16:32 +00:00

done

done
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 08:16:37 +00:00
@ -322,0 +368,4 @@
}
if _, isValid := funk.FindString(cachedRole.Permissions, func(s string) bool {
return s == permission
}); isValid {
lqhoang99 (Migrated from github.com) commented 2021-11-11 08:16:36 +00:00

done

done
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 08:16:40 +00:00
lqhoang99 (Migrated from github.com) commented 2021-11-11 08:16:40 +00:00

done

done
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 08:16:46 +00:00
lqhoang99 (Migrated from github.com) commented 2021-11-11 08:16:46 +00:00

done

done
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 08:16:51 +00:00
@ -51,3 +56,4 @@
//
// Role
//
lqhoang99 (Migrated from github.com) commented 2021-11-11 08:16:51 +00:00

done

done
namhq1989 (Migrated from github.com) reviewed 2021-11-11 09:55:17 +00:00
namhq1989 (Migrated from github.com) commented 2021-11-11 09:55:16 +00:00

đặt tên biến lại chớ trùng với tên package rồi, mc (mem-cache)

đặt tên biến lại chớ trùng với tên package rồi, `mc` (mem-cache)
namhq1989 (Migrated from github.com) reviewed 2021-11-11 09:56:11 +00:00
namhq1989 (Migrated from github.com) left a comment

check

check
lqhoang99 (Migrated from github.com) reviewed 2021-11-11 09:59:02 +00:00
lqhoang99 (Migrated from github.com) commented 2021-11-11 09:59:02 +00:00

done

done
namhq1989 (Migrated from github.com) approved these changes 2021-11-11 10:07:10 +00:00
Sign in to join this conversation.
No description provided.