Skip to content

Commit

Permalink
Support grant user role
Browse files Browse the repository at this point in the history
  • Loading branch information
slhmy committed Jul 27, 2024
1 parent ee08829 commit 39e856b
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 1 deletion.
1 change: 0 additions & 1 deletion cmd/init/casbin.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ func loadCasbinPolicies() {
enforcer := casbin_agent.GetDefaultCasbinEnforcer()

_, err := enforcer.AddGroupingPolicies([][]string{
{`user:root`, `role:super`, `system`},
{`role:super`, `role:admin`, `system`},
})
if err != nil {
Expand Down
7 changes: 7 additions & 0 deletions cmd/init/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,19 @@ package main

import (
"context"

user_service "github.com/oj-lab/oj-lab-platform/services/user"
)

func main() {
ctx := context.Background()
initDB()
loadCasbinPolicies()
err := user_service.GrantUserRole(ctx, "root", "super", "system")
if err != nil {
panic(err)
}

loadProblemPackages(ctx)
println("init success")
}
25 changes: 25 additions & 0 deletions services/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package user_service

import (
"context"
"fmt"

user_model "github.com/oj-lab/oj-lab-platform/models/user"
casbin_agent "github.com/oj-lab/oj-lab-platform/modules/agent/casbin"
gorm_agent "github.com/oj-lab/oj-lab-platform/modules/agent/gorm"
auth_module "github.com/oj-lab/oj-lab-platform/modules/auth"
log_module "github.com/oj-lab/oj-lab-platform/modules/log"
Expand Down Expand Up @@ -49,6 +51,29 @@ func UpdateUser(ctx context.Context, user user_model.User) error {
auth_module.LoginSessionData{})
}

func GrantUserRole(ctx context.Context, account, role, domain string) error {
exist, err := CheckUserExist(ctx, account)
if err != nil {
return err
}
if !exist {
return fmt.Errorf("user not exist")
}

enforcer := casbin_agent.GetDefaultCasbinEnforcer()
account = casbin_agent.UserSubjectPrefix + account
role = casbin_agent.RoleSubjectPrefix + role
notDuplicated, err := enforcer.AddRoleForUserInDomain(account, role, domain)
if err != nil {
return err
}
if !notDuplicated {
return fmt.Errorf("role already granted")
}

return nil
}

func CheckUserExist(ctx context.Context, account string) (bool, error) {
getOptions := user_model.GetUserOptions{
AccountQuery: account,
Expand Down

0 comments on commit 39e856b

Please sign in to comment.