db.go 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. package utils
  2. import (
  3. "fmt"
  4. "backend-linksee-api/models"
  5. "github.com/aiscrm/redisgo"
  6. "github.com/casbin/casbin"
  7. gormadapter "github.com/casbin/gorm-adapter"
  8. goredis "github.com/go-redis/redis"
  9. "github.com/jinzhu/gorm"
  10. )
  11. // 创建全局的mssqldb与mysqldb
  12. var LzmssqlDb *gorm.DB
  13. //var U8sqlserverDB *gorm.DB
  14. var BtkLinuxMysqlDb *gorm.DB
  15. var LzmssqlDbJdmSub *gorm.DB
  16. var Enforcer *casbin.Enforcer
  17. var PO *gormadapter.Adapter
  18. func InitDatabase() bool {
  19. var mssqlConnErr error
  20. var mysqlConnErr error
  21. mssqlConn1 := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
  22. "47.97.221.101", 14335, "JDMSub", "sa", "N5OUlZg0S2m8")
  23. LzmssqlDb, mssqlConnErr = gorm.Open("mssql", mssqlConn1)
  24. if mssqlConnErr != nil || LzmssqlDb == nil {
  25. fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
  26. }
  27. mssqlConn := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
  28. "47.97.221.101", 14335, "LZBase", "sa", "N5OUlZg0S2m8")
  29. LzmssqlDb, mssqlConnErr = gorm.Open("mssql", mssqlConn)
  30. if mssqlConnErr != nil || LzmssqlDb == nil {
  31. fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
  32. }
  33. //u8 mssql
  34. //u8mssqlConn := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
  35. // "47.111.19.91", 3433, "UFDATA_111_2017", "sa", "T%Sy8Xb3#a45")
  36. //U8sqlserverDB, mssqlConnErr = gorm.Open("mssql", u8mssqlConn)
  37. //if mssqlConnErr != nil || LzmssqlDb == nil {
  38. // fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
  39. //}
  40. mysqlConn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
  41. "root", "root811123", "47.96.113.251", 3306, "lz")
  42. BtkLinuxMysqlDb, mysqlConnErr = gorm.Open("mysql", mysqlConn)
  43. if mysqlConnErr != nil || BtkLinuxMysqlDb == nil {
  44. fmt.Printf("mysql database connect failed: %s", mysqlConnErr)
  45. }
  46. if mssqlConnErr != nil || mysqlConnErr != nil {
  47. return false
  48. }
  49. return true
  50. }
  51. func InitCasbinDB() {
  52. db, err := OpenConnection()
  53. if err != nil {
  54. fmt.Println(err.Error())
  55. }
  56. defer db.Close()
  57. // 将数据库连接同步给插件, 插件用来操作数据库
  58. PO = gormadapter.NewAdapterByDB(db)
  59. // 这里也可以使用原生字符串方式
  60. //
  61. Enforcer = casbin.NewEnforcer("./auth_model.conf", PO)
  62. // 开启权限认证日志
  63. Enforcer.EnableLog(true)
  64. // 加载数据库中的策略
  65. err = Enforcer.LoadPolicy()
  66. if err != nil {
  67. fmt.Println("loadPolicy error")
  68. panic(err)
  69. }
  70. // 创建一个角色,并赋于权限
  71. //获取角色可以访问的路由
  72. var casbinRules []gormadapter.CasbinRule
  73. db.Raw(`select * from casbin_rule where LENGTH(v2)>0`).Find(&casbinRules)
  74. for i := 0; i < len(casbinRules); i++ {
  75. // admin 这个角色可以访问GET 方式访问 /api/v2/ping
  76. fmt.Println("给角色授权可以访问的路由", casbinRules[i].V0, casbinRules[i].V1, casbinRules[i].V2)
  77. res := Enforcer.AddPolicy(casbinRules[i].V0, casbinRules[i].V1, casbinRules[i].V2)
  78. if !res {
  79. fmt.Println("policy is exist")
  80. } else {
  81. fmt.Println("policy is not exist, adding")
  82. }
  83. }
  84. // 将 test 用户加入一个角色中
  85. //Enforcer.AddRoleForUser("test", "root")
  86. //Enforcer.AddRoleForUser("tom", "admin")
  87. // 请看规则中如果用户名为 root 则不受限制
  88. //数据库中查找出对应的用户角色关联表后Enforcer
  89. var user_role_relations []models.UserRoleRelation
  90. sql := `select
  91. casbin_user_role_relation.role_id,
  92. casbin_user_role_relation.user_id,
  93. casbin_user.user_name,
  94. casbin_role.role_name
  95. from
  96. casbin_user_role_relation
  97. left join
  98. casbin_user
  99. on casbin_user_role_relation.user_id = casbin_user.id
  100. left join
  101. casbin_role
  102. on casbin_user_role_relation.role_id = casbin_role.role_id`
  103. db.Raw(sql).Find(&user_role_relations)
  104. for i := 0; i < len(user_role_relations); i++ {
  105. _ = Enforcer.AddRoleForUser(user_role_relations[i].UserName, user_role_relations[i].RoleName)
  106. }
  107. }
  108. //内网地址:r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com
  109. //外网地址:r-bp1g868m1d89jycev0pd.redis.rds.aliyuncs.com
  110. func GetRedisConn() (c *goredis.Client) {
  111. client := goredis.NewClient(&goredis.Options{
  112. Addr: "r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com",
  113. Password: "Meiyoumima1234",
  114. PoolSize: 500,
  115. PoolTimeout: 2000,
  116. IdleTimeout: 2000,
  117. MaxRetries: 3,
  118. //DB: 0,
  119. })
  120. return client
  121. }
  122. func GetRedisgo() (*redisgo.Cacher, error) {
  123. //内网地址:r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com
  124. //外网地址:r-bp1g868m1d89jycev0pd.redis.rds.aliyuncs.com
  125. c, err := redisgo.New(redisgo.Options{
  126. Addr: "r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com:6379",
  127. Password: "Meiyoumima1234",
  128. Db: 0,
  129. })
  130. return c, err
  131. }