PerBonomi
10 years agoBoss
Bulk remove roles
Hi all. I threw together a component that will let you, theoretically, remove a role from multiple users at the same time.
Caveats:
- It's not pretty
- It doesn't catch all (user) errors
- It's not localized
- It'll show a green confirmation, even if a user doesn't have the role (Sorry, no idea how to catch that without looping through all roles of every user; and I don't think all those extra api calls are necessary for this excercise.)
- In the first bit of javascript I'm unbinding "native" form submissions, because, for some reason, Lithium has a baked-in form submission protocol that hinders the custom form code from submitting.
Instructions:
- Enter a role
- enter users, separated by commas. E.g. user1,user2,user3
I recommend not adding too many at the same time. It makes an api call for every user obviously - Submit
Good luck.
<#assign userIsAdmin = false/> <#if !user.anonymous> <#list restadmin("/users/id/${user.id?c}/roles").roles.role as role> <#if role.name?? && role.name == "Administrator"> <#assign userIsAdmin = true/> <#break> </#if> </#list> </#if> <#if userIsAdmin == false> Sorry, you're not an admin. <#else> <#assign removeUsers = http.request.parameters.name.get("users", "") /> <#assign removeRole = http.request.parameters.name.get("roleremove", "") /> <#if removeUsers?? && removeUsers != ""> <#assign sucUsers = []/> <#assign errUsers = []/> <#assign roles = restadmin("/roles").roles.role /> <#list roles as role> <#if role.name == removeRole?trim> <#assign hrefRole = role.@href /> <#break> </#if> </#list> <#if !hrefRole??> Role wasn't found <#else> <#list removeUsers?split(",") as u> <#assign result = restadmin("${hrefRole}/users/remove?role.user=/users/login/${u?trim}") /> <#assign showResult = true/> <#if result?? && !result.error?has_content> <#assign sucUsers = sucUsers + ["${u}"]/> <#else> <#assign errUsers = errUsers + ["${u}"]/> </#if> </#list> </#if> </#if> <div id="BulkRemoveComponent" class="lia-panel lia-panel-standard lia-component-bulk-remove"> <div class="lia-decoration-border"> <div class="lia-decoration-border-top"><div></div></div> <div class="lia-decoration-border-content"> <div> <div class="lia-panel-heading-bar-wrapper"><div class="lia-panel-heading-bar"><span class="lia-panel-heading-bar-title">Remove roles from users</span></div></div> <div class="lia-panel-content-wrapper"> <div class="lia-panel-content"> <div class="input-roles"> <form id="test-form" action="/t5/custom/page/page-id/BulkRemoveUsers" method="post"> <input id="role" type="text" name="roleremove" name="roleremove" placeholder="Role to remove"/> <textarea id="frm-name" type="text" name="users"></textarea> <input id="btSubmit" type="submit" value="Submit"/> </form> </div> </div> <#if showResult?? && showResult == true> <div id="FormResult" class="lia-quilt-column-alley lia-quilt-column-alley-single"> <div class="InfoMessage lia-panel-feedback-banner-note lia-component-common-widget-page-feedback"> <div id="FormResultSuc"><#list sucUsers as s>${s},</#list></div> <div id="FormResultErr"><#list errUsers as e>${e},</#list></div> </div> </div> </#if> </div> </div> </div> </div> </div> <script> $(document).ready(function () { $("#test-form").unbind("submit"); }); $("#test-form").submit(function(e) { e.preventDefault(); //STOP default action var postData = escape( $('#role').val().trim() + "," + $('#frm-name').val().trim() ); var formURL = $(this).attr("action"); $.ajax( { url : formURL, type: "POST", data : postData, success:function(data, textStatus, jqXHR) { }, error: function(jqXHR, textStatus, errorThrown) { $("#confirm").text("Error!"); } }); }); </script> </#if>