Merge pull request #574 in YUNIONIO/onecloud from ~QIUJIAN/onecloud:hotfix/qj-climc-policy-explain-for-normal-user to release/2.3.0

* commit 'dcfa3aba73221a9e2602a2f7e1965e6ec207a09e':
  climc policy-explain可以指定相应的用户的账号信息
This commit is contained in:
李泽玺
2018-11-27 12:27:50 +08:00
+37 -3
View File
@@ -185,19 +185,39 @@ func init() {
})
type PolicyAdminCapableOptions struct {
User string `help:"For user"`
UserDomain string `help:"Domain for user"`
Project string `help:"Role assignments for project"`
Role []string `help:"Roles"`
}
R(&PolicyAdminCapableOptions{}, "policy-admin-capable", "Check admin capable", func(s *mcclient.ClientSession, args *PolicyAdminCapableOptions) error {
auth.InitFromClientSession(s)
policy.EnableGlobalRbac(15*time.Second, 15*time.Second, false)
capable := policy.PolicyManager.IsAdminCapable(s.GetToken())
var token mcclient.TokenCredential
if len(args.User) > 0 {
token = &mcclient.SSimpleToken{
Domain: args.UserDomain,
User: args.User,
Project: args.Project,
Roles: strings.Join(args.Role, ","),
}
} else {
token = s.GetToken()
}
capable := policy.PolicyManager.IsAdminCapable(token)
fmt.Printf("%v\n", capable)
return nil
})
type PolicyExplainOptions struct {
Request []string `help:"explain request, in format of key:is_admin:service:resource:action:extra"`
User string `help:"For user"`
UserDomain string `help:"Domain for user"`
Project string `help:"Role assignments for project"`
Role []string `help:"Roles"`
Request []string `help:"explain request, in format of key:is_admin:service:resource:action:extra"`
}
R(&PolicyExplainOptions{}, "policy-explain", "Explain policy result", func(s *mcclient.ClientSession, args *PolicyExplainOptions) error {
auth.InitFromClientSession(s)
@@ -224,11 +244,25 @@ func init() {
req.Add(jsonutils.NewArray(data...), key)
}
fmt.Println(req.String())
result, err := policy.PolicyManager.ExplainRpc(s.GetToken(), req)
var token mcclient.TokenCredential
if len(args.User) > 0 {
token = &mcclient.SSimpleToken{
Domain: args.UserDomain,
User: args.User,
Project: args.Project,
Roles: strings.Join(args.Role, ","),
}
} else {
token = s.GetToken()
}
result, err := policy.PolicyManager.ExplainRpc(token, req)
if err != nil {
return err
}
printObject(result)
return nil
})
}