2020-02-19 05:15:09 +07:00
|
|
|
package authorization
|
|
|
|
|
|
|
|
import (
|
|
|
|
"strings"
|
|
|
|
|
|
|
|
"github.com/authelia/authelia/internal/utils"
|
|
|
|
)
|
|
|
|
|
2020-06-25 15:22:42 +07:00
|
|
|
func isSubjectMatching(subject Subject, subjectRule []string) bool {
|
|
|
|
for _, ruleSubject := range subjectRule {
|
|
|
|
// If no subject is provided in the rule, we match any user.
|
|
|
|
if ruleSubject == "" {
|
|
|
|
continue
|
|
|
|
}
|
2020-02-19 05:15:09 +07:00
|
|
|
|
2020-06-25 15:22:42 +07:00
|
|
|
if strings.HasPrefix(ruleSubject, userPrefix) {
|
|
|
|
user := strings.Trim(ruleSubject[len(userPrefix):], " ")
|
|
|
|
if user == subject.Username {
|
|
|
|
continue
|
|
|
|
}
|
2020-02-19 05:15:09 +07:00
|
|
|
}
|
|
|
|
|
2020-06-25 15:22:42 +07:00
|
|
|
if strings.HasPrefix(ruleSubject, groupPrefix) {
|
|
|
|
group := strings.Trim(ruleSubject[len(groupPrefix):], " ")
|
|
|
|
if utils.IsStringInSlice(group, subject.Groups) {
|
|
|
|
continue
|
|
|
|
}
|
2020-02-19 05:15:09 +07:00
|
|
|
}
|
2020-06-25 15:22:42 +07:00
|
|
|
|
|
|
|
return false
|
2020-02-19 05:15:09 +07:00
|
|
|
}
|
2020-05-06 02:35:32 +07:00
|
|
|
|
2020-06-25 15:22:42 +07:00
|
|
|
return true
|
2020-02-19 05:15:09 +07:00
|
|
|
}
|