63 lines
1.8 KiB
Go
63 lines
1.8 KiB
Go
package httpx
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestRBACManager_DefaultPermissions(t *testing.T) {
|
|
r := NewRBACManager()
|
|
|
|
// 监管拥有全部权限
|
|
assert.True(t, r.HasPermission("regulator", PermContentIssue))
|
|
assert.True(t, r.HasPermission("regulator", PermContentTakedown))
|
|
assert.True(t, r.HasPermission("regulator", PermManageUsers))
|
|
|
|
// 审核主体不能发码
|
|
assert.False(t, r.HasPermission("reviewer", PermContentIssue))
|
|
assert.True(t, r.HasPermission("reviewer", PermContentReview))
|
|
|
|
// CP 不能下架
|
|
assert.False(t, r.HasPermission("cp", PermContentTakedown))
|
|
assert.True(t, r.HasPermission("cp", PermContentRegister))
|
|
|
|
// 运营商不能发码
|
|
assert.False(t, r.HasPermission("operator", PermContentIssue))
|
|
assert.True(t, r.HasPermission("operator", PermContentInject))
|
|
}
|
|
|
|
func TestRBACManager_DynamicConfig(t *testing.T) {
|
|
r := NewRBACManager()
|
|
|
|
// 新增自定义角色
|
|
r.SetRolePermissions("auditor", []Permission{
|
|
PermQueryProvenance, PermQueryAccountability, PermQueryEvidence,
|
|
})
|
|
assert.True(t, r.HasPermission("auditor", PermQueryProvenance))
|
|
assert.False(t, r.HasPermission("auditor", PermContentIssue))
|
|
|
|
// 动态授权
|
|
r.GrantPermission("auditor", PermContentVerify)
|
|
assert.True(t, r.HasPermission("auditor", PermContentVerify))
|
|
|
|
// 撤销权限
|
|
r.RevokePermission("auditor", PermContentVerify)
|
|
assert.False(t, r.HasPermission("auditor", PermContentVerify))
|
|
|
|
// 列出角色
|
|
roles := r.ListRoles()
|
|
assert.Contains(t, roles, "regulator")
|
|
assert.Contains(t, roles, "auditor")
|
|
|
|
// 列出权限
|
|
perms := r.ListPermissions("auditor")
|
|
assert.Len(t, perms, 3)
|
|
}
|
|
|
|
func TestRBACManager_UnknownRole(t *testing.T) {
|
|
r := NewRBACManager()
|
|
assert.False(t, r.HasPermission("nonexistent", PermContentIssue))
|
|
assert.Empty(t, r.ListPermissions("nonexistent"))
|
|
}
|