Структура разрешений Azure AD против .net Core

Как правило, лучший подход, который я нашел, переопределяет __ilshift__ в качестве сеттера и __rlshift__ в качестве геттера, дублируется декоратором свойств. Это почти последний оператор, разрешаемый только (| & amp; ^), а логический - ниже. Он редко используется (__lrshift__ меньше, но его можно принимать во внимание).

В рамках использования пакета назначения PyPi можно управлять только прямым назначением, поэтому фактическая «сила» оператора ниже , PyPi присваивает пример пакета:

class Test:

    def __init__(self, val, name):
        self._val = val
        self._name = name
        self.named = False

    def __assign__(self, other):
        if hasattr(other, 'val'):
            other = other.val
        self.set(other)
        return self

    def __rassign__(self, other):
        return self.get()

    def set(self, val):
        self._val = val

    def get(self):
        if self.named:
            return self._name
        return self._val

    @property
    def val(self):
        return self._val

x = Test(1, 'x')
y = Test(2, 'y')

print('x.val =', x.val)
print('y.val =', y.val)

x = y
print('x.val =', x.val)
z: int = None
z = x
print('z =', z)
x = 3
y = x
print('y.val =', y.val)
y.val = 4

output:

x.val = 1
y.val = 2
x.val = 2
z = <__main__.Test object at 0x0000029209DFD978>
Traceback (most recent call last):
  File "E:\packages\pyksp\pyksp\compiler2\simple_test2.py", line 44, in <module>
    print('y.val =', y.val)
AttributeError: 'int' object has no attribute 'val'

То же самое со сдвигом:

class Test:

    def __init__(self, val, name):
        self._val = val
        self._name = name
        self.named = False

    def __ilshift__(self, other):
        if hasattr(other, 'val'):
            other = other.val
        self.set(other)
        return self

    def __rlshift__(self, other):
        return self.get()

    def set(self, val):
        self._val = val

    def get(self):
        if self.named:
            return self._name
        return self._val

    @property
    def val(self):
        return self._val


x = Test(1, 'x')
y = Test(2, 'y')

print('x.val =', x.val)
print('y.val =', y.val)

x <<= y
print('x.val =', x.val)
z: int = None
z <<= x
print('z =', z)
x <<= 3
y <<= x
print('y.val =', y.val)
y.val = 4

output:

x.val = 1
y.val = 2
x.val = 2
z = 2
y.val = 3
Traceback (most recent call last):
  File "E:\packages\pyksp\pyksp\compiler2\simple_test.py", line 45, in <module>
    y.val = 4
AttributeError: can't set attribute

Таким образом, оператор <<=, получающий значение в свойстве, является гораздо более визуально чистым решением и не пытается заставить пользователя совершить некоторые отражающие ошибки, такие как:

var1.val = 1
var2.val = 2

# if we have to check type of input
var1.val = var2

# but it could be accendently typed worse,
# skipping the type-check:
var1.val = var2.val

# or much more worse:
somevar = var1 + var2
var1 += var2
# sic!
var1 = var2
0
задан Herrozerro 6 March 2019 в 01:33
поделиться

1 ответ

Azure Согласие и разрешения:

Azure всегда заботится о доступе к организационным и пользовательским данным в приоритетном порядке. Согласие - это процесс предоставления пользователю разрешения на доступ к защищенным ресурсам от его имени. Администратора или пользователя могут попросить дать согласие на доступ к его организации / отдельным данным.

Подробнее о согласии пользователя

[118] можно получить здесь: [118]

. Пользователь должен сначала дать согласие клиентскому приложению. После получения согласия клиентское приложение сможет вызывать Microsoft Graph API от имени пользователя. Так что да, фреймворк сайта требует вышеуказанного разрешения. Подробнее о структуре согласия Azure Active Directory можно узнать здесь

.
0
ответ дан Md Farid Uddin Kiron 6 March 2019 в 01:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: