123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package utils
- import (
- "fmt"
- "backend-linksee-api/models"
- "github.com/aiscrm/redisgo"
- "github.com/casbin/casbin"
- gormadapter "github.com/casbin/gorm-adapter"
- goredis "github.com/go-redis/redis"
- "github.com/jinzhu/gorm"
- )
- // 创建全局的mssqldb与mysqldb
- var LzmssqlDb *gorm.DB
- //var U8sqlserverDB *gorm.DB
- var BtkLinuxMysqlDb *gorm.DB
- var LzmssqlDbJdmSub *gorm.DB
- var Enforcer *casbin.Enforcer
- var PO *gormadapter.Adapter
- func InitDatabase() bool {
- var mssqlConnErr error
- var mysqlConnErr error
- mssqlConn1 := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
- "47.97.221.101", 14335, "JDMSub", "sa", "N5OUlZg0S2m8")
- LzmssqlDb, mssqlConnErr = gorm.Open("mssql", mssqlConn1)
- if mssqlConnErr != nil || LzmssqlDb == nil {
- fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
- }
- mssqlConn := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
- "47.97.221.101", 14335, "LZBase", "sa", "N5OUlZg0S2m8")
- LzmssqlDb, mssqlConnErr = gorm.Open("mssql", mssqlConn)
- if mssqlConnErr != nil || LzmssqlDb == nil {
- fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
- }
- //u8 mssql
- //u8mssqlConn := fmt.Sprintf("server=%s;port=%d;database=%s;user id=%s;password=%s",
- // "47.111.19.91", 3433, "UFDATA_111_2017", "sa", "T%Sy8Xb3#a45")
- //U8sqlserverDB, mssqlConnErr = gorm.Open("mssql", u8mssqlConn)
- //if mssqlConnErr != nil || LzmssqlDb == nil {
- // fmt.Printf("mssql database connect failed: %s", mssqlConnErr)
- //}
- mysqlConn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8&parseTime=True&loc=Local",
- "root", "root811123", "47.96.113.251", 3306, "lz")
- BtkLinuxMysqlDb, mysqlConnErr = gorm.Open("mysql", mysqlConn)
- if mysqlConnErr != nil || BtkLinuxMysqlDb == nil {
- fmt.Printf("mysql database connect failed: %s", mysqlConnErr)
- }
- if mssqlConnErr != nil || mysqlConnErr != nil {
- return false
- }
- return true
- }
- func InitCasbinDB() {
- db, err := OpenConnection()
- if err != nil {
- fmt.Println(err.Error())
- }
- defer db.Close()
- // 将数据库连接同步给插件, 插件用来操作数据库
- PO = gormadapter.NewAdapterByDB(db)
- // 这里也可以使用原生字符串方式
- //
- Enforcer = casbin.NewEnforcer("./auth_model.conf", PO)
- // 开启权限认证日志
- Enforcer.EnableLog(true)
- // 加载数据库中的策略
- err = Enforcer.LoadPolicy()
- if err != nil {
- fmt.Println("loadPolicy error")
- panic(err)
- }
- // 创建一个角色,并赋于权限
- //获取角色可以访问的路由
- var casbinRules []gormadapter.CasbinRule
- db.Raw(`select * from casbin_rule where LENGTH(v2)>0`).Find(&casbinRules)
- for i := 0; i < len(casbinRules); i++ {
- // admin 这个角色可以访问GET 方式访问 /api/v2/ping
- fmt.Println("给角色授权可以访问的路由", casbinRules[i].V0, casbinRules[i].V1, casbinRules[i].V2)
- res := Enforcer.AddPolicy(casbinRules[i].V0, casbinRules[i].V1, casbinRules[i].V2)
- if !res {
- fmt.Println("policy is exist")
- } else {
- fmt.Println("policy is not exist, adding")
- }
- }
- // 将 test 用户加入一个角色中
- //Enforcer.AddRoleForUser("test", "root")
- //Enforcer.AddRoleForUser("tom", "admin")
- // 请看规则中如果用户名为 root 则不受限制
- //数据库中查找出对应的用户角色关联表后Enforcer
- var user_role_relations []models.UserRoleRelation
- sql := `select
- casbin_user_role_relation.role_id,
- casbin_user_role_relation.user_id,
- casbin_user.user_name,
- casbin_role.role_name
- from
- casbin_user_role_relation
- left join
- casbin_user
- on casbin_user_role_relation.user_id = casbin_user.id
- left join
- casbin_role
- on casbin_user_role_relation.role_id = casbin_role.role_id`
- db.Raw(sql).Find(&user_role_relations)
- for i := 0; i < len(user_role_relations); i++ {
- _ = Enforcer.AddRoleForUser(user_role_relations[i].UserName, user_role_relations[i].RoleName)
- }
- }
- //内网地址:r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com
- //外网地址:r-bp1g868m1d89jycev0pd.redis.rds.aliyuncs.com
- func GetRedisConn() (c *goredis.Client) {
- client := goredis.NewClient(&goredis.Options{
- Addr: "r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com",
- Password: "Meiyoumima1234",
- PoolSize: 500,
- PoolTimeout: 2000,
- IdleTimeout: 2000,
- MaxRetries: 3,
- //DB: 0,
- })
- return client
- }
- func GetRedisgo() (*redisgo.Cacher, error) {
- //内网地址:r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com
- //外网地址:r-bp1g868m1d89jycev0pd.redis.rds.aliyuncs.com
- c, err := redisgo.New(redisgo.Options{
- Addr: "r-bp1g868m1d89jycev0487.redis.rds.aliyuncs.com:6379",
- Password: "Meiyoumima1234",
- Db: 0,
- })
- return c, err
- }
|