我想我在這裏錯過了一些東西。我有一個django project
(django 1.6,Ubuntu的盒子),其中有幾個應用程序,我想讓一個用戶管理一個特定的應用程序。它應該很簡單:選擇用戶,將他/她標記爲is_staff
並添加應用程序的權限。但這不起作用。Django的管理員 - 權限不適合員工
請務必注意,我使用自定義Authentication Middleware
來驗證我們的SSO Server
。身份驗證工作正常。權限不是。
在我settings.py
我:
MIDDLEWARE_CLASSES = (
#[...]
'django.contrib.auth.middleware.AuthenticationMiddleware',
'middlewares.sso.SsoMiddleware', # My Custom Auth Middleware
'django.contrib.auth.backends.ModelBackend',
#[...]
)
不管怎麼說,我的問題是:
- 當用戶訪問應用程序第一次,他(她)被添加/到
User
表; - 我去
Admin Interface
並標記該用戶爲is_staff
。他已被標記爲is_active
。 - 用戶現在可以進入
Admin Interface
。 - 但是,當我向他添加權限時,他/她仍然會收到「無權限」消息。
- 我的用戶訪問該應用程序的唯一方法是當我將他標記爲
super_user
,但他/她當然可以看到並更改所有應用程序,這不是我的目標。
我有一種感覺,我的自定義Auth Middleware
是culprid,但我不知道如何解決它。
任何幫助將非常感激。
編輯1:process_request()代碼:
的process_request()我sso.middleware功能:
def process_request(self, request):
if not hasattr(request, 'user'):
raise ImproperlyConfigured();
if "BBSSOToken" not in request.COOKIES:
return self.redireciona_login(request)
else:
token = request.COOKIES["BBSSOToken"] #check token on cookies
if token is not None:
sso_server = "http://address.to.my.sso.server/sso/identity/attributes"
try:
opener = urllib2.build_opener()
resposta = opener.open("%s?subjectid=%s" % (sso_server, token)).read()
matricula = self.get_atributo(resposta, "userdetails.attribute.name=uid").upper() #user id
nome = self.get_atributo(resposta, "userdetails.attribute.name=nm-idgl").upper() #name
user = authenticate(username=matricula)
request.user = user
login(request, user)
except urllib2.HTTPError, err:
if err.code == 401:
return self.redireciona_login(request) #redirects to sso login page
else:
raise
return
else:
return self.redireciona_login(request) #redirects to sso login page
你給用戶什麼權限? – elssar
爲什麼你在中間件中有auth後端?你可以展示你的中間件類嗎? – ilvar
@elssar我可以給他任何許可。即使我點擊選擇所有權限(使用is_active和is_staff)標記。我沒有工作。用戶只能在is_admin時執行操作。 – aldux