@@ -21,6 +21,7 @@ import (
2121
2222 "github.com/gophercloud/gophercloud/v2"
2323 "github.com/gophercloud/gophercloud/v2/openstack/sharedfilesystems/v2/messages"
24+ "github.com/gophercloud/gophercloud/v2/openstack/sharedfilesystems/v2/shareaccessrules"
2425 "github.com/gophercloud/gophercloud/v2/openstack/sharedfilesystems/v2/shares"
2526 "github.com/gophercloud/gophercloud/v2/openstack/sharedfilesystems/v2/sharetypes"
2627 "github.com/gophercloud/gophercloud/v2/openstack/sharedfilesystems/v2/snapshots"
@@ -75,7 +76,35 @@ func (c Client) SetShareMetadata(ctx context.Context, shareID string, opts share
7576}
7677
7778func (c Client ) GetAccessRights (ctx context.Context , shareID string ) ([]shares.AccessRight , error ) {
78- return shares .ListAccessRights (ctx , c .c , shareID ).Extract ()
79+ // Set microversion to 2.45 to use the GET /share-access-rules endpoint
80+ v := c .GetMicroversion ()
81+ c .SetMicroversion ("2.45" )
82+ defer c .SetMicroversion (v )
83+
84+ rules , err := shareaccessrules .List (ctx , c .c , shareID ).Extract ()
85+ if err != nil {
86+ return nil , err
87+ }
88+
89+ return toAccessRights (rules ), nil
90+ }
91+
92+ // toAccessRights adapts the shareaccessrules API type to the shares.AccessRight type
93+ func toAccessRights (rules []shareaccessrules.ShareAccess ) []shares.AccessRight {
94+ accessRights := make ([]shares.AccessRight , len (rules ))
95+ for i , r := range rules {
96+ accessRights [i ] = shares.AccessRight {
97+ ShareID : r .ShareID ,
98+ AccessType : r .AccessType ,
99+ AccessTo : r .AccessTo ,
100+ AccessKey : r .AccessKey ,
101+ AccessLevel : r .AccessLevel ,
102+ State : r .State ,
103+ ID : r .ID ,
104+ }
105+ }
106+
107+ return accessRights
79108}
80109
81110func (c Client ) GrantAccess (ctx context.Context , shareID string , opts shares.GrantAccessOptsBuilder ) (* shares.AccessRight , error ) {
0 commit comments