Skip to content

Instantly share code, notes, and snippets.

@dipeshhkc
Created June 24, 2021 11:35
Show Gist options
  • Save dipeshhkc/66d6029ed898f39f3a12e89c2d3897e2 to your computer and use it in GitHub Desktop.
Save dipeshhkc/66d6029ed898f39f3a12e89c2d3897e2 to your computer and use it in GitHub Desktop.
//SetupRoutes : all the routes are defined here
func SetupRoutes(db *gorm.DB) {
httpRouter := gin.Default()
// Initialize casbin adapter
adapter, err := gormadapter.NewAdapterByDB(db)
if err != nil {
panic(fmt.Sprintf("failed to initialize casbin adapter: %v", err))
}
// Load model configuration file and policy store adapter
enforcer, err := casbin.NewEnforcer("config/rbac_model.conf", adapter)
if err != nil {
panic(fmt.Sprintf("failed to create casbin enforcer: %v", err))
}
//add policy
if hasPolicy := enforcer.HasPolicy("doctor", "report", "read"); !hasPolicy {
enforcer.AddPolicy("doctor", "report", "read")
}
if hasPolicy := enforcer.HasPolicy("doctor", "report", "write"); !hasPolicy {
enforcer.AddPolicy("doctor", "report", "write")
}
if hasPolicy := enforcer.HasPolicy("patient", "report", "read"); !hasPolicy {
enforcer.AddPolicy("patient", "report", "read")
}
userRepository := repository.NewUserRepository(db)
if err := userRepository.Migrate(); err != nil {
log.Fatal("User migrate err", err)
}
userController := controller.NewUserController(userRepository)
apiRoutes := httpRouter.Group("/api")
{
apiRoutes.POST("/register", userController.AddUser(enforcer))
apiRoutes.POST("/signin", userController.SignInUser)
}
userProtectedRoutes := apiRoutes.Group("/users", middleware.AuthorizeJWT())
{
userProtectedRoutes.GET("/", middleware.Authorize("report", "read", enforcer), userController.GetAllUser)
userProtectedRoutes.GET("/:user", middleware.Authorize("report", "read", enforcer), userController.GetUser)
userProtectedRoutes.PUT("/:user", middleware.Authorize("report", "write", enforcer), userController.UpdateUser)
userProtectedRoutes.DELETE("/:user", middleware.Authorize("report", "write", enforcer), userController.DeleteUser)
}
httpRouter.Run()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment