Skip to content

Instantly share code, notes, and snippets.

@tarsisazevedo
Last active November 30, 2015 19:59
Show Gist options
  • Save tarsisazevedo/d55e40bbcb7f09f1a4b1 to your computer and use it in GitHub Desktop.
Save tarsisazevedo/d55e40bbcb7f09f1a4b1 to your computer and use it in GitHub Desktop.
tsuru permission migration
package main
import (
"fmt"
"os"
"github.com/tsuru/config"
"github.com/tsuru/tsuru/auth"
"github.com/tsuru/tsuru/db"
"github.com/tsuru/tsuru/permission"
"gopkg.in/mgo.v2/bson"
)
func createRole(name, contextType string) (permission.Role, error) {
role, err := permission.NewRole(name, contextType)
if err != nil && err != permission.ErrRoleAlreadyExists {
return role, err
}
if err == permission.ErrRoleAlreadyExists {
role, err = permission.FindRole(name)
}
return role, err
}
func main() {
err := config.ReadConfigFile(os.Args[1])
if err != nil {
panic(err)
}
adminTeam, err := config.GetString("admin-team")
if err != nil {
panic(err)
}
conn, err := db.Conn()
if err != nil {
panic(err)
}
defer conn.Close()
adminRole, err := createRole("admin", "global")
if err != nil {
panic(err)
}
err = adminRole.AddPermissions("*")
if err != nil {
panic(err)
}
teamRole, err := createRole("team-member", "team")
if err != nil {
panic(err)
}
err = teamRole.AddPermissions(permission.PermApp.FullName(),
permission.PermTeam.FullName(),
permission.PermServiceInstance.FullName())
if err != nil {
panic(err)
}
teamCreate, err := createRole("team-creator", "global")
if err != nil {
panic(err)
}
err = teamCreate.AddPermissions(permission.PermTeamCreate.FullName())
if err != nil {
panic(err)
}
users, err := auth.ListUsers()
if err != nil {
panic(err)
}
for _, u := range users {
var teams []auth.Team
err := conn.Teams().Find(bson.M{"users": bson.M{"$in": []string{u.Email}}}).All(&teams)
if err != nil {
panic(err)
}
for _, team := range teams {
if team.Name == adminTeam {
err := u.AddRole(adminRole.Name, "")
if err != nil {
fmt.Printf("%s\n", err.Error())
}
continue
}
err := u.AddRole(teamRole.Name, team.Name)
if err != nil {
fmt.Printf("%s\n", err.Error())
}
err = u.AddRole(teamCreate.Name, "")
if err != nil {
fmt.Printf("%s\n", err.Error())
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment