优化结构
This commit is contained in:
@@ -1,60 +0,0 @@
|
||||
package system
|
||||
|
||||
import (
|
||||
"strconv"
|
||||
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
// casbinRulePO mirrors the gorm-adapter CasbinRule storage shape. API
|
||||
// metadata (sys_apis) and authorization policy are intentionally independent:
|
||||
// a policy may refer to a route that has not been registered in sys_apis yet.
|
||||
// Keep this type private so the storage representation does not leak above
|
||||
// the data layer.
|
||||
type casbinRulePO struct {
|
||||
ID uint `gorm:"primaryKey;autoIncrement"`
|
||||
Ptype string `gorm:"size:100"`
|
||||
V0 string `gorm:"size:100"`
|
||||
V1 string `gorm:"size:100"`
|
||||
V2 string `gorm:"size:100"`
|
||||
V3 string `gorm:"size:100"`
|
||||
V4 string `gorm:"size:100"`
|
||||
V5 string `gorm:"size:100"`
|
||||
}
|
||||
|
||||
func (casbinRulePO) TableName() string { return "casbin_rule" }
|
||||
|
||||
func newPolicyRule(authorityID uint, path, method string) casbinRulePO {
|
||||
return casbinRulePO{
|
||||
Ptype: "p",
|
||||
V0: strconv.FormatUint(uint64(authorityID), 10),
|
||||
V1: path,
|
||||
V2: method,
|
||||
}
|
||||
}
|
||||
|
||||
func policyScope(db *gorm.DB) *gorm.DB {
|
||||
return db.Session(&gorm.Session{NewDB: true}).Model(&casbinRulePO{}).Where("ptype = ?", "p")
|
||||
}
|
||||
|
||||
func deletePoliciesForAuthority(db *gorm.DB, authorityID uint) error {
|
||||
return policyScope(db).Where("v0 = ?", strconv.FormatUint(uint64(authorityID), 10)).Delete(&casbinRulePO{}).Error
|
||||
}
|
||||
|
||||
func deletePoliciesForPath(db *gorm.DB, path, method string) error {
|
||||
return policyScope(db).Where("v1 = ? AND v2 = ?", path, method).Delete(&casbinRulePO{}).Error
|
||||
}
|
||||
|
||||
func policyRowsForAuthority(db *gorm.DB, authorityID uint) ([]casbinRulePO, error) {
|
||||
var rows []casbinRulePO
|
||||
err := policyScope(db).Where("v0 = ?", strconv.FormatUint(uint64(authorityID), 10)).Find(&rows).Error
|
||||
return rows, err
|
||||
}
|
||||
|
||||
func policyExists(db *gorm.DB, authorityID uint, path, method string) (bool, error) {
|
||||
var count int64
|
||||
err := policyScope(db).
|
||||
Where("v0 = ? AND v1 = ? AND v2 = ?", strconv.FormatUint(uint64(authorityID), 10), path, method).
|
||||
Count(&count).Error
|
||||
return count > 0, err
|
||||
}
|
||||
Reference in New Issue
Block a user