github.com/apremalal/vamps-core@v1.0.1-0.20161221121535-d430b56ec174/controllers/authorization_controller.go (about) 1 package controllers 2 3 import ( 4 "encoding/json" 5 "net/http" 6 7 "github.com/vedicsoft/vamps-core/commons" 8 ) 9 10 const ( 11 ROLE_LOCATION_MANAGER string = "location_manager" 12 ROLE_CAPTIVE_MANAGER string = "captive_manager" 13 ROLE_ADVERT_MANAGER string = "advert_manager" 14 ROLE_POLICY_MANAGER string = "policy_manager" 15 ROLE_ANALYTICS_MANAGER string = "analytics_manager" 16 ROLE_TENANT_ADMIN string = "tenant_admin" 17 ROLE_SUPER_ADMIN string = "super_admin" 18 ) 19 20 type Permission struct { 21 permission string 22 } 23 24 /** 25 * get scope from jwt and check for permission 26 * "scopes": { 27 * "wifi_location": [ 28 * "read", 29 * "write", 30 * "execute" 31 * ] 32 * } 33 */ 34 func IsAuthorized(resourceId string, permission string, r *http.Request) bool { 35 m1 := make(map[string][]string) 36 json.Unmarshal([]byte(r.Header.Get("scopes")), &m1) 37 m2 := m1[resourceId] 38 if m2 != nil { 39 for _, element := range m2 { 40 if element == permission { 41 return true 42 } 43 } 44 } 45 return false 46 } 47 48 func IsUserAuthorized(username string, resourceId string, permission string, r *http.Request) bool { 49 m1 := make(map[string][]string) 50 json.Unmarshal([]byte(r.Header.Get("scopes")), &m1) 51 52 m2 := m1[resourceId] 53 if m2 != nil && username == r.Header.Get("username") { 54 for _, element := range m2 { 55 if element == permission { 56 return true 57 } 58 } 59 } 60 return false 61 } 62 63 func HasRole(userID int, role string) (bool, error) { 64 const GET_USER_ROLE string = `SELECT vs_roles.roleid from vs_roles WHERE vs_roles.roleid IN (SELECT 65 vs_user_roles.roleid FROM vs_user_roles WHERE vs_user_roles.userid=?) AND 66 vs_roles.name =?` 67 var roles []int 68 dbMap := commons.GetDBConnection(commons.PLATFORM_DB) 69 var err error 70 _, err = dbMap.Select(&roles, GET_USER_ROLE, userID, role) 71 if err != nil { 72 return false, err 73 } 74 if len(roles) > 0 { 75 return true, nil 76 } 77 return false, nil 78 } 79 80 func RequireResourceAuthorization(inner http.Handler) http.Handler { 81 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 82 }) 83 }