Open owen-gxz opened 6 years ago
func setRoles(r string, db *gorm.DB) {
roles.Register(r, func(req *http.Request, currentUser interface{}) bool {
u := currentUser.(*cms.User)
if u.RoleID == 0 {
return false
}
// fmt.Println(fmt.Sprintf("%#v", u))
cmsR := &cms.CmsUserRole{}
cmsUsers.Locker.Lock()
if cmsUsers.Data[fmt.Sprintf("%d", u.ID)] == nil {
newCUR := &cms.CmsUserRole{}
err := db.Model(newCUR).Preload("CmsUserRoleList").First(newCUR, u.RoleID).Error
if err != nil {
return false
}
cmsR = newCUR
cmsUsers.Data[fmt.Sprintf("%d", u.ID)] = newCUR
} else {
cmsR = cmsUsers.Data[fmt.Sprintf("%d", u.ID)]
}
cmsUsers.Locker.Unlock()
for _, i := range cmsR.CmsUserRoleList {
if i.Value == r {
return true
}
}
return false
})
}
你需要给resource指定具体的权限 Admin.AddResource(&models.News{}, &admin.Config{Name: "Sport", Priority: 1, Menu: []string{"新闻"}, Permission: roles.Deny(roles.CRUD, "locale_reader")})
我所有的都指定了。。但是有的是正确的有的无效
QorAdmin.AddResource(&model.NewsType{}, &admin.Config{
Permission: roles.Allow(roles.Read, helpers.CmsAdmin, getRole(newsTypeRole, roleRead)).
Allow(roles.Update, helpers.CmsAdmin, getRole(newsTypeRole, roleEdit)).
Allow(roles.Delete, helpers.CmsAdmin, getRole(newsTypeRole, roleDelete)).
Allow(roles.Create, helpers.CmsAdmin, getRole(newsTypeRole, roleAdd)),
Menu: []string{"新闻管理"}, Name: "新闻类型管理", IconName: "merge_type",
})
你的程序有点复杂,建议你在roles.Register方法里debug一下,看看每次用户是哪个role,一个用户只能命中一个role
我使用
func(c *admin.Context) {
fmt.Println(c.Roles)
}
获取到的权限列表是正确的,但是页面展示及操作会有问题,有一部分是好的,一部分是错误的
I want to generate permissions through the directory my login user roles: [complaint_type_read locale_admin complaint_type_add locale_reader complaint_type_edit global_admin complaint_type_delete] more menu errors:
roles code:
UserTmpl: