]> saetta.ns0.it Git - zakautho/libzakautho/commitdiff
Added function Autoz::add_resource_with_parents (but parents not managed).
authorAndrea Zagli <azagli@libero.it>
Fri, 25 Jun 2010 17:55:06 +0000 (19:55 +0200)
committerAndrea Zagli <azagli@libero.it>
Fri, 25 Jun 2010 17:55:06 +0000 (19:55 +0200)
Bugfixes.

src/autoz.c
src/autoz.h
tests/test.c

index 5a3430c4a82f729372fad18eaaaab838129ad7b1..741e1077e5aae7531dc0b477c15c5c3b3809298c 100644 (file)
@@ -149,6 +149,27 @@ autoz_add_role_with_parents (Autoz *autoz, AutozIRole *irole, ...)
                }
 }
 
+AutozIRole
+*autoz_get_role_from_id (Autoz *autoz, const gchar *role_id)
+{
+       AutozPrivate *priv;
+       Role *role;
+
+       g_return_val_if_fail (IS_AUTOZ (autoz), NULL);
+
+       priv = AUTOZ_GET_PRIVATE (autoz);
+
+       role = g_hash_table_lookup (priv->roles, role_id);
+       if (role == NULL)
+               {
+                       return NULL;
+               }
+       else
+               {
+                       return role->irole;
+               }
+}
+
 void
 autoz_add_resource (Autoz *autoz, AutozIResource *iresource)
 {
@@ -173,28 +194,64 @@ autoz_add_resource (Autoz *autoz, AutozIResource *iresource)
                }
 }
 
-AutozIRole
-*autoz_get_role_from_id (Autoz *autoz, const gchar *role_id)
+void
+autoz_add_resource_with_parents (Autoz *autoz, AutozIResource *iresource, ...)
 {
-       AutozPrivate *priv;
+       AutozPrivate *priv = AUTOZ_GET_PRIVATE (autoz);
 
-       g_return_val_if_fail (IS_AUTOZ (autoz), NULL);
+       const gchar *resource_id;
 
-       priv = AUTOZ_GET_PRIVATE (autoz);
+       g_return_if_fail (IS_AUTOZ (autoz));
+       g_return_if_fail (AUTOZ_IS_IRESOURCE (iresource));
 
-       return g_hash_table_lookup (priv->roles, role_id);
+       resource_id = autoz_iresource_get_resource_id (iresource);
+
+       if (g_hash_table_lookup (priv->resources, resource_id) == NULL)
+               {
+                       va_list args;
+                       Resource *resource;
+
+                       AutozIResource *iresource_parent;
+                       Resource *resource_parent;
+
+                       resource = (Resource *)g_malloc0 (sizeof (Resource));
+                       resource->iresource = iresource;
+                       resource->parents = NULL;
+
+                       va_start (args, iresource);
+                       while ((iresource_parent = va_arg (args, AutozIResource *)) != NULL)
+                               {
+                                       resource_parent = g_hash_table_lookup (priv->resources, autoz_iresource_get_resource_id (iresource_parent));
+                                       if (resource_parent != NULL)
+                                               {
+                                                       resource->parents = g_list_append (resource->parents, resource_parent);
+                                               }                                       
+                               }
+                       va_end (args);
+
+                       g_hash_table_insert (priv->resources, (gpointer)resource_id, (gpointer)resource);
+               }
 }
 
 AutozIResource
 *autoz_get_resource_from_id (Autoz *autoz, const gchar *resource_id)
 {
        AutozPrivate *priv;
+       Resource *resource;
 
        g_return_val_if_fail (IS_AUTOZ (autoz), NULL);
 
        priv = AUTOZ_GET_PRIVATE (autoz);
 
-       return g_hash_table_lookup (priv->resources, resource_id);
+       resource = g_hash_table_lookup (priv->resources, resource_id);
+       if (resource == NULL)
+               {
+                       return NULL;
+               }
+       else
+               {
+                       return resource->iresource;
+               }
 }
 
 void
index 0490ac24fe567629e7b7453a298572fcd56633e9..9584cc4abde8e76e31a5193858d5e97b2a4cc480 100644 (file)
@@ -59,9 +59,11 @@ void autoz_add_role (Autoz *autoz, AutozIRole *irole);
 void autoz_add_role_with_parents (Autoz *autoz, AutozIRole *irole, ...);
 
 AutozIRole *autoz_get_role_from_id (Autoz *autoz, const gchar *role_id);
-AutozIResource *autoz_get_resource_from_id (Autoz *autoz, const gchar *resource_id);
 
 void autoz_add_resource (Autoz *autoz, AutozIResource *iresource);
+void autoz_add_resource_with_parents (Autoz *autoz, AutozIResource *iresource, ...);
+
+AutozIResource *autoz_get_resource_from_id (Autoz *autoz, const gchar *resource_id);
 
 void autoz_allow (Autoz *autoz, AutozIRole *irole, AutozIResource *iresource);
 
index 85596382f777b1b02c1e5db2cc0d4be0802641d2..820292fc5519c577a5b9e37af4ca59b9881ae479 100644 (file)
@@ -47,6 +47,11 @@ main (int argc, char **argv)
        resource = autoz_resource_new ("page");
        autoz_add_resource (autoz, AUTOZ_IRESOURCE (resource));
 
+       autoz_add_resource_with_parents (autoz,
+               AUTOZ_IRESOURCE (autoz_resource_new ("paragraph")),
+               autoz_get_resource_from_id (autoz, "page"),
+               NULL);
+
        autoz_allow (autoz, AUTOZ_IROLE (role_writer), AUTOZ_IRESOURCE (resource));
 
        g_message ("writer %s allowed to page.",