app-cloudep-permission-server/pkg/domain/rbac/rule.go

62 lines
1.1 KiB
Go

package rbac
// Rule 最多六個參數,例如
//
// p, admin, data1, read
// PolicyType:p
// Field0:admin
// Field01:data1
// Field02:read
type Rule struct {
PolicyType string // p or g
Field0 string
Field1 string
Field2 string
Field3 string
Field4 string
Field5 string
}
// ToString 轉換成這樣 []string{"p", "admin", "data1", "read"} 讓 casbin 看得懂
func (rule Rule) ToString() []string {
fields := []string{
rule.PolicyType, rule.Field0, rule.Field1,
rule.Field2, rule.Field3, rule.Field4, rule.Field5,
}
// 移除空字串,提高效能
result := make([]string, 0, len(fields))
for _, field := range fields {
if field != "" {
result = append(result, field)
}
}
return result
}
func StringToPolicy(policyType string, rule []string) Rule {
line := Rule{}
line.PolicyType = policyType
if len(rule) > 0 {
line.Field0 = rule[0]
}
if len(rule) > 1 {
line.Field1 = rule[1]
}
if len(rule) > 2 {
line.Field2 = rule[2]
}
if len(rule) > 3 {
line.Field3 = rule[3]
}
if len(rule) > 4 {
line.Field4 = rule[4]
}
if len(rule) > 5 {
line.Field5 = rule[5]
}
return line
}