新增门店 ip配置
This commit is contained in:
@ -15,4 +15,8 @@ type IStoreV1 interface {
|
||||
Create(ctx context.Context, req *v1.CreateReq) (res *v1.CreateRes, err error)
|
||||
Update(ctx context.Context, req *v1.UpdateReq) (res *v1.UpdateRes, err error)
|
||||
Delete(ctx context.Context, req *v1.DeleteReq) (res *v1.DeleteRes, err error)
|
||||
AddIp(ctx context.Context, req *v1.AddIpReq) (res *v1.AddIpRes, err error)
|
||||
DeleteIp(ctx context.Context, req *v1.DeleteIpReq) (res *v1.DeleteIpRes, err error)
|
||||
UpdateIp(ctx context.Context, req *v1.UpdateIpReq) (res *v1.UpdateIpRes, err error)
|
||||
GetIpList(ctx context.Context, req *v1.GetIpListReq) (res *v1.GetIpListRes, err error)
|
||||
}
|
||||
|
||||
@ -42,3 +42,47 @@ type DeleteReq struct {
|
||||
type DeleteRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
|
||||
type AddIpReq struct {
|
||||
g.Meta `path:"/store/addIp" method:"post" tags:"Store" summary:"(系统、商户门店后台)添加门店IP"`
|
||||
StoreId int64 `json:"storeId" v:"required" dc:"门店ID"`
|
||||
Ip string `json:"ip" v:"required" dc:"IP"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
}
|
||||
|
||||
type AddIpRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
|
||||
type DeleteIpReq struct {
|
||||
g.Meta `path:"/store/del/{id}" method:"delete" tags:"Store" summary:"(系统、商户门店后台)删除门店IP"`
|
||||
Id int64 `json:"id" v:"required" dc:"id"`
|
||||
}
|
||||
|
||||
type DeleteIpRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
|
||||
type UpdateIpReq struct {
|
||||
g.Meta `path:"/store/updateIp" method:"put" tags:"Store" summary:"(系统、商户门店后台)更新门店IP"`
|
||||
Id int64 `json:"id" v:"required" dc:"id"`
|
||||
//StoreId int64 `json:"storeId" v:"required" dc:"storeId"`
|
||||
Ip string `json:"ip" v:"required" dc:"IP"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
}
|
||||
|
||||
type UpdateIpRes struct {
|
||||
Success bool `json:"success" dc:"是否成功"`
|
||||
}
|
||||
|
||||
type GetIpListReq struct {
|
||||
g.Meta `path:"/store/getIpList" method:"get" tags:"Store" summary:"(系统、商户门店后台)获取门店IP列表"`
|
||||
StoreId int64 `json:"storeId" dc:"门店ID"`
|
||||
Page int `json:"page" v:"required" dc:"页数"`
|
||||
Size int `json:"size" v:"required" dc:"每页数量"`
|
||||
}
|
||||
|
||||
type GetIpListRes struct {
|
||||
List interface{} `json:"list" dc:"IP列表"`
|
||||
Total int64 `json:"total" dc:"总数"`
|
||||
}
|
||||
|
||||
23
internal/controller/store/store_v1_add_ip.go
Normal file
23
internal/controller/store/store_v1_add_ip.go
Normal file
@ -0,0 +1,23 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/store/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) AddIp(ctx context.Context, req *v1.AddIpReq) (res *v1.AddIpRes, err error) {
|
||||
|
||||
out, err := service.Store().CreateIP(ctx, &model.IPCreateIn{
|
||||
Ip: req.Ip,
|
||||
Remark: req.Remark,
|
||||
StoreId: int(req.StoreId),
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.AddIpRes{Success: out.Success}, nil
|
||||
}
|
||||
20
internal/controller/store/store_v1_delete_ip.go
Normal file
20
internal/controller/store/store_v1_delete_ip.go
Normal file
@ -0,0 +1,20 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/store/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) DeleteIp(ctx context.Context, req *v1.DeleteIpReq) (res *v1.DeleteIpRes, err error) {
|
||||
|
||||
out, err := service.Store().DeleteIP(ctx, &model.IPDeleteIn{
|
||||
Id: req.Id,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.DeleteIpRes{Success: out.Success}, nil
|
||||
}
|
||||
25
internal/controller/store/store_v1_get_ip_list.go
Normal file
25
internal/controller/store/store_v1_get_ip_list.go
Normal file
@ -0,0 +1,25 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/store/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) GetIpList(ctx context.Context, req *v1.GetIpListReq) (res *v1.GetIpListRes, err error) {
|
||||
|
||||
list, err := service.Store().GetIPList(ctx, &model.IPListIn{
|
||||
Page: req.Page,
|
||||
Size: req.Size,
|
||||
StoreId: req.StoreId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.GetIpListRes{
|
||||
List: list.List,
|
||||
Total: list.Total,
|
||||
}, nil
|
||||
}
|
||||
22
internal/controller/store/store_v1_update_ip.go
Normal file
22
internal/controller/store/store_v1_update_ip.go
Normal file
@ -0,0 +1,22 @@
|
||||
package store
|
||||
|
||||
import (
|
||||
"context"
|
||||
"server/internal/model"
|
||||
"server/internal/service"
|
||||
|
||||
"server/api/store/v1"
|
||||
)
|
||||
|
||||
func (c *ControllerV1) UpdateIp(ctx context.Context, req *v1.UpdateIpReq) (res *v1.UpdateIpRes, err error) {
|
||||
out, err := service.Store().UpdateIP(ctx, &model.IPUpdateIn{
|
||||
Id: req.Id,
|
||||
Ip: req.Ip,
|
||||
Remark: req.Remark,
|
||||
//StoreId: int(req.StoreId),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &v1.UpdateIpRes{Success: out.Success}, nil
|
||||
}
|
||||
91
internal/dao/internal/store_ips.go
Normal file
91
internal/dao/internal/store_ips.go
Normal file
@ -0,0 +1,91 @@
|
||||
// ==========================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// ==========================================================================
|
||||
|
||||
package internal
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/gogf/gf/v2/database/gdb"
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
)
|
||||
|
||||
// StoreIpsDao is the data access object for the table store_ips.
|
||||
type StoreIpsDao struct {
|
||||
table string // table is the underlying table name of the DAO.
|
||||
group string // group is the database configuration group name of the current DAO.
|
||||
columns StoreIpsColumns // columns contains all the column names of Table for convenient usage.
|
||||
handlers []gdb.ModelHandler // handlers for customized model modification.
|
||||
}
|
||||
|
||||
// StoreIpsColumns defines and stores column names for the table store_ips.
|
||||
type StoreIpsColumns struct {
|
||||
Id string // 主键ID
|
||||
StoreId string // 关联门店ID
|
||||
IpAddress string // IP地址(支持IPv4或IPv6)
|
||||
Remark string // 备注
|
||||
CreatedAt string // 创建时间
|
||||
UpdatedAt string // 更新时间
|
||||
DeletedAt string // 软删除时间戳
|
||||
}
|
||||
|
||||
// storeIpsColumns holds the columns for the table store_ips.
|
||||
var storeIpsColumns = StoreIpsColumns{
|
||||
Id: "id",
|
||||
StoreId: "store_id",
|
||||
IpAddress: "ip_address",
|
||||
Remark: "remark",
|
||||
CreatedAt: "created_at",
|
||||
UpdatedAt: "updated_at",
|
||||
DeletedAt: "deleted_at",
|
||||
}
|
||||
|
||||
// NewStoreIpsDao creates and returns a new DAO object for table data access.
|
||||
func NewStoreIpsDao(handlers ...gdb.ModelHandler) *StoreIpsDao {
|
||||
return &StoreIpsDao{
|
||||
group: "default",
|
||||
table: "store_ips",
|
||||
columns: storeIpsColumns,
|
||||
handlers: handlers,
|
||||
}
|
||||
}
|
||||
|
||||
// DB retrieves and returns the underlying raw database management object of the current DAO.
|
||||
func (dao *StoreIpsDao) DB() gdb.DB {
|
||||
return g.DB(dao.group)
|
||||
}
|
||||
|
||||
// Table returns the table name of the current DAO.
|
||||
func (dao *StoreIpsDao) Table() string {
|
||||
return dao.table
|
||||
}
|
||||
|
||||
// Columns returns all column names of the current DAO.
|
||||
func (dao *StoreIpsDao) Columns() StoreIpsColumns {
|
||||
return dao.columns
|
||||
}
|
||||
|
||||
// Group returns the database configuration group name of the current DAO.
|
||||
func (dao *StoreIpsDao) Group() string {
|
||||
return dao.group
|
||||
}
|
||||
|
||||
// Ctx creates and returns a Model for the current DAO. It automatically sets the context for the current operation.
|
||||
func (dao *StoreIpsDao) Ctx(ctx context.Context) *gdb.Model {
|
||||
model := dao.DB().Model(dao.table)
|
||||
for _, handler := range dao.handlers {
|
||||
model = handler(model)
|
||||
}
|
||||
return model.Safe().Ctx(ctx)
|
||||
}
|
||||
|
||||
// Transaction wraps the transaction logic using function f.
|
||||
// It rolls back the transaction and returns the error if function f returns a non-nil error.
|
||||
// It commits the transaction and returns nil if function f returns nil.
|
||||
//
|
||||
// Note: Do not commit or roll back the transaction in function f,
|
||||
// as it is automatically handled by this function.
|
||||
func (dao *StoreIpsDao) Transaction(ctx context.Context, f func(ctx context.Context, tx gdb.TX) error) (err error) {
|
||||
return dao.Ctx(ctx).Transaction(ctx, f)
|
||||
}
|
||||
22
internal/dao/store_ips.go
Normal file
22
internal/dao/store_ips.go
Normal file
@ -0,0 +1,22 @@
|
||||
// =================================================================================
|
||||
// This file is auto-generated by the GoFrame CLI tool. You may modify it as needed.
|
||||
// =================================================================================
|
||||
|
||||
package dao
|
||||
|
||||
import (
|
||||
"server/internal/dao/internal"
|
||||
)
|
||||
|
||||
// storeIpsDao is the data access object for the table store_ips.
|
||||
// You can define custom methods on it to extend its functionality as needed.
|
||||
type storeIpsDao struct {
|
||||
*internal.StoreIpsDao
|
||||
}
|
||||
|
||||
var (
|
||||
// StoreIps is a globally accessible object for table store_ips operations.
|
||||
StoreIps = storeIpsDao{internal.NewStoreIpsDao()}
|
||||
)
|
||||
|
||||
// Add your custom methods and functionality below.
|
||||
@ -173,3 +173,93 @@ func (s *sStore) GetDesktopSetting(ctx context.Context, in *model.StoreGetDeskto
|
||||
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (s *sStore) GetIPList(ctx context.Context, in *model.IPListIn) (*model.IPListout, error) {
|
||||
|
||||
m := dao.StoreIps.Ctx(ctx)
|
||||
if in.StoreId > 0 {
|
||||
m = m.Where(do.StoreIps{
|
||||
StoreId: in.StoreId,
|
||||
})
|
||||
}
|
||||
|
||||
var list []model.StoreIps
|
||||
var total int
|
||||
|
||||
err := m.Page(in.Page, in.Size).ScanAndCount(&list, &total, false)
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("IP列表获取失败")
|
||||
}
|
||||
|
||||
return &model.IPListout{
|
||||
List: list,
|
||||
Total: int64(total),
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStore) CreateIP(ctx context.Context, in *model.IPCreateIn) (*model.IPCreateOut, error) {
|
||||
|
||||
exist, err := dao.StoreIps.Ctx(ctx).Where(do.StoreIps{StoreId: in.StoreId, IpAddress: in.Ip}).Exist()
|
||||
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("门店IP创建失败")
|
||||
}
|
||||
|
||||
if exist {
|
||||
return nil, ecode.Params.Sub("门店IP已存在")
|
||||
}
|
||||
|
||||
_, err = dao.StoreIps.Ctx(ctx).Insert(do.StoreIps{
|
||||
IpAddress: in.Ip,
|
||||
Remark: in.Remark,
|
||||
StoreId: in.StoreId,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("门店IP创建失败")
|
||||
}
|
||||
return &model.IPCreateOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStore) UpdateIP(ctx context.Context, in *model.IPUpdateIn) (*model.IPUpdateOut, error) {
|
||||
|
||||
//exist, err := dao.StoreIps.Ctx(ctx).Where(do.StoreIps{StoreId: in.StoreId, IpAddress: in.Ip}).Exist()
|
||||
//
|
||||
//if err != nil {
|
||||
// return nil, ecode.Fail.Sub("门店IP更新失败")
|
||||
//}
|
||||
//
|
||||
//if exist {
|
||||
// return nil, ecode.Params.Sub("门店IP已存在")
|
||||
//}
|
||||
|
||||
_, err := dao.StoreIps.Ctx(ctx).Where(do.StoreIps{Id: in.Id}).Data(do.StoreIps{IpAddress: in.Ip, Remark: in.Remark}).Update()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("门店IP更新失败")
|
||||
}
|
||||
return &model.IPUpdateOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (s *sStore) DeleteIP(ctx context.Context, in *model.IPDeleteIn) (*model.IPDeleteOut, error) {
|
||||
|
||||
exist, err := dao.StoreIps.Ctx(ctx).Where(do.StoreIps{Id: in.Id}).Exist()
|
||||
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("门店IP查询失败")
|
||||
}
|
||||
|
||||
if !exist {
|
||||
return nil, ecode.Params.Sub("门店不已存在")
|
||||
}
|
||||
|
||||
_, err = dao.StoreIps.Ctx(ctx).Where(do.StoreIps{Id: in.Id}).Delete()
|
||||
if err != nil {
|
||||
return nil, ecode.Fail.Sub("删除门店IP失败")
|
||||
}
|
||||
return &model.IPDeleteOut{
|
||||
Success: true,
|
||||
}, nil
|
||||
}
|
||||
|
||||
22
internal/model/do/store_ips.go
Normal file
22
internal/model/do/store_ips.go
Normal file
@ -0,0 +1,22 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package do
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// StoreIps is the golang structure of table store_ips for DAO operations like Where/Data.
|
||||
type StoreIps struct {
|
||||
g.Meta `orm:"table:store_ips, do:true"`
|
||||
Id interface{} // 主键ID
|
||||
StoreId interface{} // 关联门店ID
|
||||
IpAddress interface{} // IP地址(支持IPv4或IPv6)
|
||||
Remark interface{} // 备注
|
||||
CreatedAt *gtime.Time // 创建时间
|
||||
UpdatedAt *gtime.Time // 更新时间
|
||||
DeletedAt *gtime.Time // 软删除时间戳
|
||||
}
|
||||
20
internal/model/entity/store_ips.go
Normal file
20
internal/model/entity/store_ips.go
Normal file
@ -0,0 +1,20 @@
|
||||
// =================================================================================
|
||||
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
|
||||
// =================================================================================
|
||||
|
||||
package entity
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
// StoreIps is the golang structure for table store_ips.
|
||||
type StoreIps struct {
|
||||
Id int64 `json:"id" orm:"id" description:"主键ID"` // 主键ID
|
||||
StoreId int64 `json:"storeId" orm:"store_id" description:"关联门店ID"` // 关联门店ID
|
||||
IpAddress string `json:"ipAddress" orm:"ip_address" description:"IP地址(支持IPv4或IPv6)"` // IP地址(支持IPv4或IPv6)
|
||||
Remark string `json:"remark" orm:"remark" description:"备注"` // 备注
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||
}
|
||||
@ -2,6 +2,7 @@ package model
|
||||
|
||||
import (
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
)
|
||||
|
||||
type Store struct {
|
||||
@ -17,6 +18,16 @@ type Store struct {
|
||||
NetbarAccount string `json:"netbarAccount" orm:"netbar_account" dc:"网吧网关账号"`
|
||||
}
|
||||
|
||||
type StoreIps struct {
|
||||
Id int64 `json:"id" orm:"id" description:"主键ID"` // 主键ID
|
||||
StoreId int64 `json:"storeId" orm:"store_id" description:"关联门店ID"` // 关联门店ID
|
||||
IpAddress string `json:"ipAddress" orm:"ip_address" description:"IP地址(支持IPv4或IPv6)"` // IP地址(支持IPv4或IPv6)
|
||||
Remark string `json:"remark" orm:"remark" description:"备注"` // 备注
|
||||
CreatedAt *gtime.Time `json:"createdAt" orm:"created_at" description:"创建时间"` // 创建时间
|
||||
UpdatedAt *gtime.Time `json:"updatedAt" orm:"updated_at" description:"更新时间"` // 更新时间
|
||||
DeletedAt *gtime.Time `json:"deletedAt" orm:"deleted_at" description:"软删除时间戳"` // 软删除时间戳
|
||||
}
|
||||
|
||||
type StoreCreateIn struct {
|
||||
OperatorId int64
|
||||
OperatorRole string
|
||||
@ -59,3 +70,43 @@ type StoreDeleteIn struct {
|
||||
OperatorId int
|
||||
OperatorRole string
|
||||
}
|
||||
|
||||
type IPListIn struct {
|
||||
StoreId int64 `json:"storeId" dc:"IP列表ID"`
|
||||
Page int `json:"page"`
|
||||
Size int `json:"size"`
|
||||
}
|
||||
|
||||
type IPListout struct {
|
||||
List interface{} `json:"list"`
|
||||
Total int64 `json:"total"`
|
||||
}
|
||||
|
||||
type IPUpdateIn struct {
|
||||
Id int64 `json:"id" dc:"IP列表ID"`
|
||||
Ip string `json:"ip" dc:"IP地址"`
|
||||
StoreId int `json:"storeId" dc:"门店ID"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
}
|
||||
|
||||
type IPUpdateOut struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type IPDeleteIn struct {
|
||||
Id int64
|
||||
}
|
||||
|
||||
type IPDeleteOut struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
type IPCreateIn struct {
|
||||
Ip string `json:"ip" dc:"IP地址"`
|
||||
StoreId int `json:"storeId" dc:"门店ID"`
|
||||
Remark string `json:"remark" dc:"备注"`
|
||||
}
|
||||
|
||||
type IPCreateOut struct {
|
||||
Success bool `json:"success"`
|
||||
}
|
||||
|
||||
@ -18,6 +18,10 @@ type (
|
||||
Delete(ctx context.Context, in *model.StoreDeleteIn) (out *model.DeleteOut, err error)
|
||||
Info(ctx context.Context, in *model.StoreInfoIn) (out *model.StoreInfoOut, err error)
|
||||
GetDesktopSetting(ctx context.Context, in *model.StoreGetDesktopSettingIn) (*model.StoreGetDesktopSettingOut, error)
|
||||
GetIPList(ctx context.Context, in *model.IPListIn) (*model.IPListout, error)
|
||||
CreateIP(ctx context.Context, in *model.IPCreateIn) (*model.IPCreateOut, error)
|
||||
UpdateIP(ctx context.Context, in *model.IPUpdateIn) (*model.IPUpdateOut, error)
|
||||
DeleteIP(ctx context.Context, in *model.IPDeleteIn) (*model.IPDeleteOut, error)
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@ -43,7 +43,7 @@ func init() {
|
||||
// 任务
|
||||
enforcer.AddPolicy("guest", "/x/task/ranking", "GET", "获取排行榜")
|
||||
enforcer.AddPolicy("guest", "/x/task/getNonLoginTaskList", "GET", "未登录获取任务列表")
|
||||
enforcer.AddPolicy("guest", "/x/reward/callback", "POST", "")
|
||||
enforcer.AddPolicy("guest", "/x/reward/callback", "POST", "tencent回调")
|
||||
|
||||
// 游戏列表
|
||||
enforcer.AddPolicy("guest", "/x/game", "GET", "获取游戏列表")
|
||||
@ -127,6 +127,12 @@ func init() {
|
||||
|
||||
enforcer.AddPolicy("guest", "/x/task/completed/list", "GET", "获取游戏列表")
|
||||
|
||||
// 获取门店 ip信息
|
||||
enforcer.AddPolicy("store", "/x/store/getIpList", "GET", "获取门店 ip信息列表")
|
||||
enforcer.AddPolicy("store", "/x/store/addIp", "POST", "添加ip信息")
|
||||
enforcer.AddPolicy("store", "/x/store/del/*", "DELETE", "删除门店 ip信息")
|
||||
enforcer.AddPolicy("store", "/x/store/updateIp", "PUT", "修改门店 ip信息")
|
||||
|
||||
}
|
||||
// 商户
|
||||
{
|
||||
@ -159,7 +165,7 @@ func init() {
|
||||
enforcer.AddPolicy("admin", "/x/task/selector", "GET", "管理员获取任务列表二级选择器")
|
||||
|
||||
// 用户:删除
|
||||
enforcer.AddPolicy("admin", "/x/user/del/{id}", "DELETE", "删除用户")
|
||||
enforcer.AddPolicy("admin", "/x/user/del/*", "DELETE", "删除用户")
|
||||
}
|
||||
instance = &myCasbin{Enforcer: enforcer}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user