permission.go 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package main
  2. import (
  3. "encoding/json"
  4. "log"
  5. "net/http"
  6. "imuslab.com/arozos/mod/common"
  7. permission "imuslab.com/arozos/mod/permission"
  8. prout "imuslab.com/arozos/mod/prouter"
  9. )
  10. func permissionNewHandler() {
  11. ph, err := permission.NewPermissionHandler(sysdb)
  12. if err != nil {
  13. log.Println("Permission Handler creation failed.")
  14. panic(err)
  15. }
  16. permissionHandler = ph
  17. permissionHandler.LoadPermissionGroupsFromDatabase()
  18. }
  19. func permissionInit() {
  20. //Register the permission handler, require authentication except listgroup
  21. adminRouter := prout.NewModuleRouter(prout.RouterOption{
  22. ModuleName: "System Setting",
  23. AdminOnly: true,
  24. UserHandler: userHandler,
  25. DeniedHandler: func(w http.ResponseWriter, r *http.Request) {
  26. common.SendErrorResponse(w, "Permission Denied")
  27. },
  28. })
  29. //Must be handled by default router
  30. http.HandleFunc("/system/permission/listgroup", func(w http.ResponseWriter, r *http.Request) {
  31. if authAgent.GetUserCounts() == 0 {
  32. //There is no user within the system. Only allow register of admin account
  33. js, _ := json.Marshal([]string{"administrator"})
  34. common.SendJSONResponse(w, string(js))
  35. //permissionHandler.HandleListGroup(w, r)
  36. } else {
  37. //There are already users in the system. Only allow authorized users
  38. if authAgent.CheckAuth(r) {
  39. requestingUser, _ := userHandler.GetUserInfoFromRequest(w, r)
  40. if requestingUser != nil && requestingUser.IsAdmin() {
  41. permissionHandler.HandleListGroup(w, r)
  42. } else {
  43. errorHandlePermissionDenied(w, r)
  44. }
  45. } else {
  46. errorHandlePermissionDenied(w, r)
  47. return
  48. }
  49. }
  50. })
  51. adminRouter.HandleFunc("/system/permission/newgroup", permissionHandler.HandleGroupCreate)
  52. adminRouter.HandleFunc("/system/permission/editgroup", permissionHandler.HandleGroupEdit)
  53. adminRouter.HandleFunc("/system/permission/delgroup", permissionHandler.HandleGroupRemove)
  54. registerSetting(settingModule{
  55. Name: "Permission Groups",
  56. Desc: "Handle the permission of access in groups",
  57. IconPath: "SystemAO/users/img/small_icon.png",
  58. Group: "Users",
  59. StartDir: "SystemAO/users/group.html",
  60. RequireAdmin: true,
  61. })
  62. }