Giter VIP home page Giter VIP logo

Comments (6)

casbin-bot avatar casbin-bot commented on May 29, 2024

@tangyang9464 @JalinWang @imp2002

from gorm-adapter.

weloe avatar weloe commented on May 29, 2024

like this

// SavePolicy saves policy to database.
func (a *Adapter) SavePolicy(model model.Model) error {
	var err error
	tx := a.db.Begin()

	if a.db.Config.Name() == sqlite.DriverName {
		err = tx.Exec(fmt.Sprintf("delete from %s", a.getFullTableName())).Error
	} else {
		err = tx.Exec(fmt.Sprintf("truncate table %s", a.getFullTableName())).Error
	}

	if err != nil {
		tx.Rollback()
		return err
	}

	var lines []CasbinRule
	flushEvery := 1000
	for ptype, ast := range model["p"] {
		for _, rule := range ast.Policy {
			lines = append(lines, a.savePolicyLine(ptype, rule))
			if len(lines) > flushEvery {
				if err := tx.Create(&lines).Error; err != nil {
					tx.Rollback()
					return err
				}
				lines = nil
			}
		}
	}

	for ptype, ast := range model["g"] {
		for _, rule := range ast.Policy {
			lines = append(lines, a.savePolicyLine(ptype, rule))
			if len(lines) > flushEvery {
				if err := tx.Create(&lines).Error; err != nil {
					tx.Rollback()
					return err
				}
				lines = nil
			}
		}
	}
	if len(lines) > 0 {
		if err := tx.Create(&lines).Error; err != nil {
			tx.Rollback()
			return err
		}
	}

	tx.Commit()

	return nil
}

from gorm-adapter.

hsluoyz avatar hsluoyz commented on May 29, 2024

@weloe good idea. Can you make a PR to add the transaction?

from gorm-adapter.

weloe avatar weloe commented on May 29, 2024

@weloe good idea. Can you make a PR to add the transaction?

yes, I'll try

from gorm-adapter.

weloe avatar weloe commented on May 29, 2024

@weloe good idea. Can you make a PR to add the transaction?

pr #208

from gorm-adapter.

shaolei avatar shaolei commented on May 29, 2024

也许这个能解决之前一些权限莫名其妙失效的问题

from gorm-adapter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.