Spring Security (AKA Acegi) 플러그인이 제공하는 주석을 사용하고 있습니다.Grails Acegi 플러그인 주석
주석이 달린 제어기 작업이 관리자 및 일반 사용자에게 제공되어야 함을 나타냅니다. 하지만 지금은 관리자와 등록되지 않은 사용자가 사용할 수있는 작업임을 나타낼 필요가 있습니다. 주석을 사용하여 역할이없는 사용자, 즉 등록되지 않은 사용자를 나타낼 수 있습니까?
감사합니다, 돈
Spring Security (AKA Acegi) 플러그인이 제공하는 주석을 사용하고 있습니다.Grails Acegi 플러그인 주석
주석이 달린 제어기 작업이 관리자 및 일반 사용자에게 제공되어야 함을 나타냅니다. 하지만 지금은 관리자와 등록되지 않은 사용자가 사용할 수있는 작업임을 나타낼 필요가 있습니다. 주석을 사용하여 역할이없는 사용자, 즉 등록되지 않은 사용자를 나타낼 수 있습니까?
감사합니다, 돈
사용하십시오 쿠키로 로그인하지 않았거나 ROLE_ADMIN을 가지고 있습니다.
package com.burtbeckwith.grails.springsecurity
import org.springframework.security.Authentication
import org.springframework.security.AuthenticationTrustResolverImpl
import org.springframework.security.ConfigAttribute
import org.springframework.security.ConfigAttributeDefinition
import org.springframework.security.vote.AccessDecisionVoter
class NotLoggedInVoter implements AccessDecisionVoter {
private authenticationTrustResolver = new AuthenticationTrustResolverImpl()
int vote(Authentication authentication, object, ConfigAttributeDefinition config) {
for (configAttribute in config.configAttributes) {
if (supports(configAttribute)) {
if (authenticationTrustResolver.isAnonymous(authentication)) {
// allowed if not logged in
return ACCESS_GRANTED
}
for (authority in authentication.authorities) {
if ('ROLE_ADMIN' == authority.authority) {
// allowed if logged in as an admin
return ACCESS_GRANTED
}
}
}
}
return ACCESS_DENIED
}
boolean supports(ConfigAttribute attribute) {
'IS_NOT_AUTHENTICATED' == attribute?.attribute
}
boolean supports(Class clazz) {
true
}
}
등록이 resources.groovy에서 빈으로 :
beans = {
notLoggedInVoter(com.burtbeckwith.grails.springsecurity.NotLoggedInVoter)
}
및 SecurityConfig.groovy에서 유권자 목록에 의한에 추가 새 'IS_NOT_AUTHENTICATED'토큰을 처리하는 사용자 정의 유권자 필요 이 당신의 컨트롤러 액션을
decisionVoterNames = ['notLoggedInVoter', 'authenticatedVoter', 'roleVoter']
및 주석 : 다음 'decisionVoterNames'속성을 설정
@Secured(['IS_NOT_AUTHENTICATED'])
이며 ROLE_ADMIN 인 인증되지 않은 사용자와 인증 된 사용자 만 허용합니다.
그의 토큰의 여부를 기록 여부를 사람을 의미 IS_AUTHENTICATED_ANONYMOUSLY이다. IS_AUTHENTICATED_REMEMBERED는 remember-me 쿠키 또는 명시 적 로그인을 사용하여 로그인 한 모든 사용자를 의미하며 IS_AUTHENTICATED_FULLY는 쿠키를 사용하지 않고 명시 적 로그인을 통해 로그인했음을 의미합니다. 당신이
@Secured(['IS_AUTHENTICATED_ANONYMOUSLY'])
와 액션에 주석을 경우
그것은 사람이 해당 작업에 액세스 할 수 있습니다. 사용자가있는 경우에도 관리자가 전용 그러나 사용자 이름/암호 로그인을 강제 할 수 있도록 예를 들어, 그래서 당신은 역할과 이러한 특수 토큰을 결합 할 수있는 기억 - 내가 당신이 여기에서 필요로하는 솔루션이다
@Secured(['ROLE_ADMIN', 'IS_AUTHENTICATED_FULLY'])
응답 해 주셔서 감사합니다. 어노테이션을 사용하여 표현하고자하는 것은 "로그인 여부"가 아닌 "로그인하지 않음"입니다. –
IS_NOT_AUTHENTICATED의 의미를 (admin 또는 not authenticaed)에서 단순히 (인증되지 않은) 것으로 변경하는 것이 디자인의 관점에서 더 좋을 것이라고 생각합니다. 아마도이 토큰을 ROLE_ 토큰의 조합과 결합 할 수 있습니다. 아마도이 변경은 'NotLoggedInVoter.vote'의 마지막'for '루프를 제거함으로써 이루어질 수 있습니다. –
그건 그렇고, 나는이 수준의 도움을 기대하지 않았습니다. –