在aQuery/jquery中使用django用户权限

x8goxv8g  于 8个月前  发布在  Go
关注(0)|答案(2)|浏览(83)

有没有可能在aplog中使用django权限。我在django的一个模板中有以下代码,它可以完美地检查权限。

{% if perms.users.change_account %}
    <a class="btn btn-info btn-sm" href="/users/account_edit/">
       <i class="fas fa-pencil-alt">
       </i>
       Edit
    </a>
 {% endif %}

字符串
我有一个js文件,里面有一个approach,我想在向innerhtml添加一些元素时添加权限检查

const sendSearchData = (dev) => {
    $.ajax({
        type: 'POST',
        url: '/customers/dev_search',
        data: {
            'csrfmiddlewaretoken': csrfDevice,
            'dev': dev,
            'id': cid,
        },
        success: (res)=> {
            
            const devData = res.data
            
            if(Array.isArray(devData)){

                resultsListDev.classList.remove('not-visible')
                resultsListDev.innerHTML = ""
                devData.forEach(dev=>{
                    resultsListDev.innerHTML += `
                    <tr>
                    <td>
                      ${dev.name}
                    </td>
            <td>
    # Is there a way to check user permissions in django from ajax and if it has a specific permissions
    # then display, like how can i check this in ajax "perms.users.change_account"
                <a class="btn btn-info btn-sm" href="/users/account_edit/">
                    <i class="fas fa-pencil-alt">
                        </i>
                          Edit
                    </a>
           </td>
        </tr>
                   `
                })
            }
        },
        error: (err)=> {
            console.log(err)
        }
    })
}


不知道如何在django中通过权限检查用户权限。尝试查看文档和搜索网页,但找不到任何东西。

nzk0hqpo

nzk0hqpo1#

你可以在你的JS脚本中使用Django模板,但这只有在你的脚本是页面内HTML的时候才可能(你的JS在你的模板中的<script>标签中,也应该是同一个文件的一部分)。你不能在你导入的*.js文件中使用Django模板语法。
举例来说:

...
<body>
    ...

    <script>
        your JS code here!
    </script>
</body>

字符串

0vvn1miw

0vvn1miw2#

根据您的用例,有几个选项可供您选择。
您可以:

  • 在响应中返回你想要的HTML。这样它就保持了权限服务器端的逻辑。
  • 将用户的权限作为AJAX响应或其他API调用的一部分返回。
  • 使用Django模板将登录用户的权限直接写入JavaScript

您需要确保没有人可以做任何恶意的事情,所以不要忘记检查服务器端从前端接收的任何数据。
你可以使用Django模板化在模板内的脚本标签之间写入数据,

<script>
const canChangeAccount = {{ perms.users.change_account }}
const userName = "{{ perms.users.name }}" // Just an example of strings
</script>

字符串
因此,您可以创建一个在单击时调用的函数,例如

<script>
const canChangeAccount = {{ perms.users.change_account }}

function sendAjaxRequest() {
   return sendSearchData(dev, canChangeAccount)
}
</script>


sendAjaxRequest的创建是为了让canChangeAccount可以传递给sendSearchData,而不需要将所有AJAX代码直接放入模板中,也不需要将权限分配给window对象,这样它们就可以很容易地被操纵。

相关问题