57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package auth
|
|
|
|
import (
|
|
"strconv"
|
|
|
|
"git.lxtend.com/qqbot/constants"
|
|
"git.lxtend.com/qqbot/model"
|
|
"git.lxtend.com/qqbot/sqlite3"
|
|
)
|
|
|
|
func init() {
|
|
authTableCreateSQL := `
|
|
CREATE TABLE IF NOT EXISTS auth (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
qqid TEXT UNIQUE,
|
|
role INTEGER
|
|
);
|
|
`
|
|
sqlite3.TryCreateTable(authTableCreateSQL)
|
|
}
|
|
|
|
func HasPermission(qqID int64, level constants.PermissionLevel) bool {
|
|
auth, err := getAuth(qqID)
|
|
maxRetry := 50
|
|
for i := 0; i < maxRetry && (err != nil); i++ {
|
|
auth, err = getAuth(qqID)
|
|
}
|
|
if err != nil || auth.Qqid == "" {
|
|
return false
|
|
}
|
|
return auth.Role <= level
|
|
}
|
|
|
|
func SetPermission(qqID int64, level constants.PermissionLevel) error {
|
|
auth := Auth{
|
|
Qqid: strconv.Itoa(int(qqID)),
|
|
Role: level,
|
|
}
|
|
return setAuth(auth)
|
|
}
|
|
|
|
func TryExecHandler(msg model.Message, level constants.PermissionLevel, handler model.Handler) (reply *model.Reply) {
|
|
if permission, err := getAuth(msg.UserId); err == nil {
|
|
if permission.Role == constants.LEVEL_IGNORE {
|
|
return nil
|
|
}
|
|
}
|
|
if HasPermission(msg.UserId, level) {
|
|
return handler(msg)
|
|
}
|
|
return &model.Reply{
|
|
ReplyMsg: "权限校验错误",
|
|
ReferOriginMsg: true,
|
|
FromMsg: msg,
|
|
}
|
|
}
|