diff --git a/_states/barbicanv1.py b/_states/barbicanv1.py
index 8c70bea..af202d5 100644
--- a/_states/barbicanv1.py
+++ b/_states/barbicanv1.py
@@ -213,6 +213,39 @@
     return _created(image_name, 'sign_image', resp)
 
 
+def secret_acl_present(name, cloud_name, **kwargs):
+    try:
+        secret = _barbicanv1_call(
+            'secret_get_details', name=name, cloud_name=cloud_name
+        )
+    except Exception as e:
+        if 'ResourceNotFound' in repr(e):
+            return _absent(name, 'secret')
+        if 'MultipleResourcesFound' in repr(e):
+            return _find_failed(name, 'secret')
+    try:
+        resp = _barbicanv1_call('secret_acl_get', name=name,
+                                cloud_name=cloud_name)
+    except Exception as e:
+        if 'ResourceNotFound' in repr(e):
+            resp = _barbicanv1_call('secret_acl_put', name=name,
+                                    cloud_name=cloud_name, **kwargs)
+            return _created(name, 'acl', resp)
+        else:
+            log.error('Add acl for user faild with {}'.format(e))
+        return _create_failed(name, 'acl')
+
+    missing_users = [user_id
+                     for user_id in kwargs.get('users', [])
+                     if user_id not in resp['read']['users']]
+    if missing_users:
+        kwargs['users'] = missing_users
+        resp = _barbicanv1_call('secret_acl_put', name=name,
+                                cloud_name=cloud_name, **kwargs)
+        return _created(name, 'acl', resp)
+    return _no_changes(name, 'acl')
+
+
 def _created(name, resource, resource_definition):
     changes_dict = {
         'name': name,
