40 lignes
1 Kio
Go
40 lignes
1 Kio
Go
package userPermission
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"github.com/ewhal/nyaa/model"
|
|
"github.com/ewhal/nyaa/service/user"
|
|
"github.com/ewhal/nyaa/util/log"
|
|
)
|
|
|
|
// HasAdmin checks that user has an admin permission.
|
|
func HasAdmin(user *model.User) bool {
|
|
name := "admin"
|
|
for _, role := range user.Roles {
|
|
log.Debugf("HasAdmin role.Name : %s", role.Name)
|
|
if role.Name == name {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// CurrentOrAdmin check that user has admin permission or user is the current user.
|
|
func CurrentOrAdmin(user *model.User, userId uint) bool {
|
|
log.Debugf("user.Id == userId %d %d %s", user.Id, userId, user.Id == userId)
|
|
return (HasAdmin(user) || user.Id == userId)
|
|
}
|
|
|
|
// CurrentUserIdentical check that userId is same as current user's Id.
|
|
func CurrentUserIdentical(r *http.Request, userId uint) (bool, error) {
|
|
currentUser, err := userService.CurrentUser(r)
|
|
if err != nil {
|
|
return false, errors.New("Auth failed.")
|
|
}
|
|
if currentUser.Id != userId {
|
|
return false, errors.New("User is not identical.")
|
|
}
|
|
|
|
return true, nil
|
|
}
|