2009-06-14 3 views
0

Wenn ich Tabs mit einer der Grails-GUI-Optionen erzeuge (welche sollte ich verwenden), ist es möglich, Tabs basierend auf dem aktuellen ein- und auszuschalten Benutzer? Zum Beispiel sollten nur Benutzer mit der Rolle des Administrators die Registerkarte Benutzer verwalten sehen. Und selbst anonyme Benutzer sollten die Registerkarte Main Content sehen.Kann ich dies in Grails 2 tun: Einzelne Tabs mit Spring-Sicherheit sichern

Idealerweise möchte ich Spring Security ACL verwenden.

+0

Glad einige der jüngsten Antworten haben auf diese Frage bekommen, die ich vor 3 Jahren gefragt! Der Titel hat seit der Veröffentlichung von Grails 2.x eine neue Bedeutung. Als ich die Frage vorher geschrieben habe, war es meine zweite Frage "Kann ich das in Grälern tun" :). –

+0

:) Ich habe das Datum nicht gesehen. Jemand muss es aktualisiert haben und es erschien oben auf der Liste für neue Fragen zu Grails. – ibaralf

Antwort

0

einfach hinzuzufügen, manchmal können Sie zu viel Logik und Codierung in der Ansicht hinzufügen (GSP). Sie können mehr Code auf den Controller übertragen, indem Sie andere Optionen wie das Navigations-Plugin zusammen mit dem Spring-Security-Plugin verwenden. Das Schöne ist, die Ansicht ist einfach sauber entfernen Zustand Tags.

grails install-plugin navigation 

Dann in der Steuerung nur die @Secured Annotation verwenden. Zum Beispiel habe ich zwei Registerkarten mit zwei entsprechenden Controllern erstellt.

@Secured(['ROLE_ADMIN']) 
class SlidesController { 

static navigation = [ 
    group:'tabs', order:10, title:'Users', action:'index' 
] 
def index = { 
     ..... 
} 

@Secured(['ROLE_ADMIN']) 
class ProgramsController { 

static navigation = [ 
    group:'tabs', order:10, title:'Programs & Presentation', action:'index' 
] 
def index = { 
     ..... 
} 

Nach Ansicht:

<head> 
    ... other head elems. 
    <nav:resources/> 
</head> 

<body> 
<nav:render/> 
    ... Your other stuff 
</body> 

Tabs erscheint automatisch (wäre auch sinnvoll sein, diese Ansicht ein Layout APS zu machen).

enter image description here

0

Ja, es ist möglich und ziemlich einfach mit dem Acegi (Spring Security Plugin), siehe this section of the docs. Sie müssen einige Rollen definieren und dann beschreiben, wie diese Rollen auf verschiedene URLs angewendet werden. Beispiel (von Link oben):

/admin/= ROLE_USER /Buch/test/ = IS_AUTHENTICATED_FULLY /Buch/** = ROLE_SUPERVISOR

Es gibt auch Erklärungen darüber, wie genau dies in Grails zu tun Im Action-Buch.

+0

Danke für Ihre Antwort. Dies betrifft die Sicherung von URLs. Voraussetzung sind jedoch sichere spezifische Registerkarten auf derselben Seite. Der Prototyp meiner App (gemacht mit ZK, worüber ich Zweifel habe) ist http://flashlit.serveall.net/flashlit. –

+1

Wenn Sie auf derselben Seite meinen, dass der HTML-Code zum Rendern aller Tabs in derselben HTTP-Anfrage gesendet wird, haben Sie kein Glück - das Design der Sicherheitsebene Ihrer App muss geändert werden, damit der sichere Inhalt nicht gesendet wird . Es ist viel einfacher und modularer, nach URL zu trennen (und dann Ajax zu verwenden, um den Inhalt der Registerkarte zu laden). – Chii

0

Spring Security hat dafür eine schöne Tag-Bibliothek. Sie können mit etwas Ähnliches wie diese machen die Registerkarten abgrenzen:

<sec:authorize access="hasRole('supervisor')"> 

This content will only be visible to users who have 
the "supervisor" authority in their list of <tt>GrantedAuthority</tt>s. 

</sec:authorize> 

Sie können nur die jsp-Tag als normal aktivieren:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 

Lesen Sie mehr über sie here if you like

Verwandte Themen