{"result":{"depiction_url":null,"edges":{"relation":{"objects":[{"created":"2020-05-30T05:48:17Z","object_id":{"id":2010,"is_a":["text","documentation","reference","module"],"name":"doc_module_mod_signup","title":"mod_signup","uri":"https:\/\/zotonic.com\/id\/2010"},"seq":1000000}],"predicate":{"id":303,"is_a":["meta","predicate"],"name":"relation","title":{"_type":"trans","tr":{"nl":"Relatie","en":"Relation"}},"uri":"http:\/\/purl.org\/dc\/terms\/relation"}}},"id":1596,"is_a":["text","documentation","cookbook"],"links":[{"rel":"self","target":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1596"},{"rel":"hub","target":"https:\/\/zotonic.com\/.zotonic\/websub"}],"medium":null,"medium_url":null,"name":"doc_cookbook_admin_user_group","page_url":{"en":"https:\/\/zotonic.com\/cookbook\/1596\/automatically-add-new-users-to-a-user-group","x-default":"https:\/\/zotonic.com\/cookbook\/1596\/automatically-add-new-users-to-a-user-group"},"preview_url":null,"resource":{"body":"<div>\n            \n  <div class=\"section\">\n\n<div class=\"section\">\n<h2>Why<\/h2>\n<aside class=\"admonition note\">\n<p class=\"first admonition-title\">Note<\/p>\n<p class=\"last\">If you merely want to change the default user group for <em>all<\/em> users, you can\ndo so through a <a class=\"reference internal\" href=\"\/id\/doc_module_mod_signup\"><span class=\"std std-ref\">configuration parameter<\/span><\/a>\nand you don’t need the solution below.<\/p>\n<\/aside>\n<p>When you create a person, you usually need to add it to a user group as well.\nYou may want to automate this, in particular if you need to differentiate the\nuser group based on the person’s category.<\/p>\n<\/div>\n<div class=\"section\">\n<h2>Solution<\/h2>\n<p>You can set the user group by adding a <code class=\"docutils literal notranslate\"><span class=\"pre\">hasusergroup<\/span><\/code> property to the\nresource. In your site’s main <code class=\"docutils literal notranslate\"><span class=\"pre\">.erl<\/span><\/code> file, add a <code class=\"docutils literal notranslate\"><span class=\"pre\">rsc_update<\/span><\/code> observer:<\/p>\n<div class=\"highlight-erlang notranslate\"><div class=\"highlight\"><pre><span><\/span><span class=\"p\">-<\/span><span class=\"ni\">export<\/span><span class=\"p\">([<\/span>\n    <span class=\"n\">observe_rsc_update<\/span><span class=\"o\">\/<\/span><span class=\"mi\">3<\/span>\n<span class=\"p\">]).<\/span>\n\n<span class=\"nf\">observe_rsc_update<\/span><span class=\"p\">(<\/span><span class=\"nl\">#rsc_update<\/span><span class=\"p\">{<\/span><span class=\"n\">action<\/span> <span class=\"o\">=<\/span> <span class=\"n\">insert<\/span><span class=\"p\">,<\/span> <span class=\"n\">id<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">Id<\/span><span class=\"p\">},<\/span> <span class=\"p\">{<\/span><span class=\"n\">ok<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Props<\/span><span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nv\">Acc<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Context<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"c\">%% Where &#39;vip&#39; is a subcategory of &#39;person&#39;<\/span>\n    <span class=\"k\">case<\/span> <span class=\"nn\">m_rsc<\/span><span class=\"p\">:<\/span><span class=\"nf\">is_a<\/span><span class=\"p\">(<\/span><span class=\"nv\">Id<\/span><span class=\"p\">,<\/span> <span class=\"n\">vip<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Context<\/span><span class=\"p\">)<\/span> <span class=\"k\">of<\/span>\n        <span class=\"n\">false<\/span> <span class=\"o\">-&gt;<\/span>\n            <span class=\"c\">%% Do nothing<\/span>\n            <span class=\"nv\">Acc<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">true<\/span> <span class=\"o\">-&gt;<\/span>\n            <span class=\"c\">%% Add hasusergroup property<\/span>\n            <span class=\"p\">{<\/span><span class=\"n\">ok<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Props<\/span><span class=\"p\">#{<\/span> <span class=\"o\">&lt;&lt;<\/span><span class=\"s\">&quot;hasusergroup&quot;<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"o\">=&gt;<\/span> <span class=\"nn\">m_rsc<\/span><span class=\"p\">:<\/span><span class=\"nf\">rid<\/span><span class=\"p\">(<\/span><span class=\"n\">acl_user_group_vips<\/span><span class=\"p\">,<\/span> <span class=\"nv\">Context<\/span><span class=\"p\">)}}<\/span>\n    <span class=\"k\">end<\/span><span class=\"p\">;<\/span>\n<span class=\"nf\">observe_rsc_update<\/span><span class=\"p\">(<\/span><span class=\"nl\">#rsc_update<\/span><span class=\"p\">{},<\/span> <span class=\"nv\">Acc<\/span><span class=\"p\">,<\/span> <span class=\"p\">_<\/span><span class=\"nv\">Context<\/span><span class=\"p\">)<\/span> <span class=\"o\">-&gt;<\/span>\n    <span class=\"c\">%% Fall through<\/span>\n    <span class=\"nv\">Acc<\/span><span class=\"p\">.<\/span>\n<\/pre><\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n           <\/div>","category_id":{"id":318,"is_a":["meta","category"],"name":"cookbook","title":{"_type":"trans","tr":{"en":"Cookbook"}},"uri":"https:\/\/test.zotonic.com\/id\/318"},"content_group_id":{"id":339,"is_a":["meta","content_group"],"name":"default_content_group","title":{"_type":"trans","tr":{"en":"Default Content Group"}},"uri":"https:\/\/zotonic.com\/id\/default_content_group"},"created":"2020-05-30T05:47:27Z","creator_id":{"id":336,"is_a":["person","robot"],"name":"gitbot","title":"Git","uri":"https:\/\/zotonic.com\/id\/336"},"github_url":"https:\/\/github.com\/zotonic\/zotonic\/tree\/master\/doc\/cookbook\/admin-user-group.rst","is_authoritative":true,"is_dependent":false,"is_featured":false,"is_protected":false,"is_published":true,"is_unfindable":false,"language":["en"],"modified":"2022-02-15T10:01:38Z","modifier_id":{"id":336,"is_a":["person","robot"],"name":"gitbot","title":"Git","uri":"https:\/\/zotonic.com\/id\/336"},"name":"doc_cookbook_admin_user_group","pivot_geocode":null,"pivot_location_lat":null,"pivot_location_lng":null,"privacy":0,"publication_end":"9999-06-01T00:00:00Z","publication_start":"2022-02-15T10:01:38Z","slug":"automatically-add-new-users-to-a-user-group","title":"Automatically add new users to a user group","title_slug":"automatically-add-new-users-to-a-user-group","tz":"UTC","uri":null,"version":18,"visible_for":0},"uri":"https:\/\/zotonic.com\/id\/1596","uri_template":"https:\/\/zotonic.com\/id\/:id","websub":{"hub":"https:\/\/zotonic.com\/.zotonic\/websub","topic":"https:\/\/zotonic.com\/.zotonic\/websub\/topic\/1596"}},"status":"ok"}