簡體   English   中英

通過Python和Django中的GUI修改LDAP用戶

[英]Modify LDAP user via a GUI in Python and Django

我正在使用一個Web應用程序供LDAP用戶登錄並編輯其屬性,例如用戶名,描述等。我想知道是否有一種方法可以修改登錄用戶的屬性。 python-ldap3庫的Modify運算符是解決方法,但是我只能在代碼本身中修改指定的用戶。

是否有可能使此功能成為已登錄用戶的常規功能? 我在尋找解決方案,但找不到任何東西。

這是我的修改運算符(modify.py):

from ldap3 import Server, Connection, ALL, MODIFY_REPLACE

s = Server('192.168.1.154', get_info=ALL)

c = Connection(s, 'cn=ldap_user,cn=Users,dc=domain,dc=com', 'Password', auto_bind=False)
c.bind()

c.modify('cn=ldap_user,cn=Users,dc=domain,dc=com',
        {'givenName': [(MODIFY_REPLACE, ['Test'])],
         'sn': [(MODIFY_REPLACE, ['User'])]})
print(c.result)

c.unbind()

順便說一句,我使用的是Django,所以在這一點上,我什至不知道該做什么和做什么。

我的edit_profile視圖:

def edit_profile(request):
if request.method == 'POST':
    form = EditProfileForm(request.POST, instance=request.user)

    if form.is_valid():
        form.save()
        return redirect(reverse('accounts:view_profile'))
else:
    form = EditProfileForm(instance=request.user)
args = {'form': form}
return render(request, 'accounts/edit_profile.html', args)

我的EditProfileForm:

class EditProfileForm(UserChangeForm):
first_name = forms.CharField(max_length=30, required=False,
widget=forms.TextInput(
        attrs={
            'class': 'form-control',
            'type': 'text',
            'name': 'first_name',

        }
    )
)

last_name = forms.CharField(max_length=30, required=False,
widget=forms.TextInput(
        attrs={
            'class': 'form-control',
            'type': 'text',
            'name': 'last_name',
        }
    )
)

email = forms.EmailField(max_length=30, required=True,
widget=forms.TextInput(
        attrs={
            'class': 'form-control',
            'type': 'email',
            'name': 'email',
        }
    )
)

password = forms.CharField(required=False,
widget=forms.PasswordInput(
        attrs={
            'class': 'form-control',
            'type': 'hidden',
            'name': 'password',
        }
    )
)

class Meta:
    model = LdapUser
    fields = (
        'first_name',
        'last_name',
        'email',
        'password'
    )

可以使用Connection和聲明用於修改屬性的方法來組成新的ModifiableConnection類。 例如

from ldap3 import Server, Connection, ALL, MODIFY_REPLACE


class ModifiableConnection(object):
    def __init__(self, *args, **kwargs):
        self.conn = Connection(*args, **kwargs)

    def _modify_attr(self, attrname, values):
         attr = {attrname: [(MODIFY_REPLACE, values)]}
         self.conn.modify(self.conn.user, attr)

    def unbind(self):
         self.conn.unbind()

    @property
    def firstname(self): pass

    @firstname.setter
    def firstname(self, val):
        self.modify_attr('givenName', [val])

    @property
    def lastname(self): pass

    @lastname.setter
    def lastname(self, val):
        self.modify_attr('sn', [val])



    def bind(self):
         self.conn.bind()

server = Server('192.168.1.154', get_info=ALL)

user = 'cn=ldap_user,cn=Users,dc=domain,dc=com'
mod_con = ModifiableConnection(server, user, 'Password', auto_bind=False)
mod_con.bind()

mod_con.firstname = 'Test'
mod_con.lastname = 'User'

mod_con.unbind()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM