Parastoo Ebrahimi
4 سال پیش توسط Parastoo Ebrahimi مطرح شد
6 پاسخ

permission در ری اکت

سلام. من یه وب اپلیکیشنی رو توسعه دادم و حالا رسیدم به user permission. به این صورت که یک api دارن که با کال کردن اون محدودیت های یوزر رو میگه که به چه چیزهایی نمیتونه دسترسی داشته باشه و باید اون محدودیت ها اعمال بشه. محدودیت ها هم به این صورت هست که به کدوم api ها میتونه دسترسی داشته باشه که اون رو در پایین میتونید ببینید ولی من اصلا هیچ دیدی ندارم که این قضیه رو چجوری باید پیاده سازی کنم. ممنون میشم راهنمایی کنید.

[
    {
        "name": "Accelerator",
        "allowDefault": true,
        "verbs": {
            "get": false,
            "post": true,
            "delete": true
        },
        "actions": {
            "api/accelerators": true
        }
    },
    {
        "name": "Account",
        "allowDefault": true,
        "verbs": {
            "get": true,
            "delete": true,
            "post": true,
            "put": true
        },
        "actions": {
            "api/accounts": true,
            "api/account/{id}": true,
            "api/accounts/ageing": true,
            "api/account/findexternal/{externalid}": true,
            "api/account/card/{id}": true,
            "api/account/{guid}/card/{id}": true,
            "api/account/{id}/members": true,
            "api/account/{id}/member/{customerID}": true,
            "api/account/AdjustAccount/{id}": true,
            "api/account/{id}/AdjustAccount": true,
            "api/customer/{id}/accounts": true,
            "api/account/{id}/groups": true,
            "api/account/reportemails": true,
            "api/account/{id}/accountledger": true,
            "api/account/import": true,
            "api/account": true
        }
    },

@mohsenbostan
@hesammousavi
@sinashahoveisi


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 4 سال پیش مطرح شد
0

این قضیه باید تو سمت بک اند اجرا بشه ولی اگر بخواد سمت فرانت هم اجرا بشه باید اولین بار که میاد تو صفحه اصلی یا هر صفحه ایی این json گرفته بشه از سرور توی تابع componentDidMount هم این کار رو بکنید و بعد هر جا که url میخواید تعریف کنید چک کنید این url رو با اون json که از سمت بک اند اومده. اگر که اجازه داشت که این url رو ببینه که بگذارید url کامل رو اگر هم که نباید ببینه که خب یک string خالی بذارید.

یا وقتی که این url میخواد صدا زده بشه با json محدودیت های کاربر چک بشه


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش آپدیت شد
0

یعنی url رو بگردم توی اون json که گرفتم ببینم true or false هست بعد با توجه به اون یا نمایشش بدم یا پنهانش کنم؟
@sinashahoveisi


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@sinashahoveisi
جوری که فهمیدم برای هر کامپوننت باید اون جی سان رو کال کنم تا باهاش بتونم url های صفحه رو چک کنم.. این با یک فانکشن هم شدنیه که utl رو‌به عنوان ورودی بهش بدیم و‌بعد نتیجه رو‌ با true یا false برگردونه؟ برای verb هاش چه کاری باید بکنم؟


سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 4 سال پیش مطرح شد
0

بله دقیقا. فانکشن هم گزینه خوبیه که یک بار json رو ذخیره کنید و هر بار توی یک تابع url مدنظر رو بفرستید و ببینید میتونه دسترسی داشته باشه یا نه

واسه همچین url هایی api/account/{id}/groups هم میتونید از regular expression استفاده کنید یا میتونید چک کنید که اول url که یک استرینگ است /api/account و آخر آن هم groups/ را داشته باشد


Parastoo Ebrahimi
تخصص : front-end developer
@parastooebrahimi 4 سال پیش مطرح شد
0

@sinashahoveisi
برای url ها پیاده سازیش کردم به صورت یک فانکشنن که به صورت زیره. حالا برای verb ها چه کنم؟

 checkIfhasPermission = (url, arrPermission,controller) => {

            let hasPermission = false;
            if (arrPermission.length>0){
                let temp= arrPermission.filter(x => x.name=== controller);
           var action= temp.some(y=> y.actions[url])
           action ? hasPermission=true : hasPermission=false

           return hasPermission
            } else{
                return true
            }

ورودی اول اسم api هست ورودی دوم restriction array و ورودی سوم هم group name هست. به عنوان مثال :

this.checkIfhasPermission("api/stores",this.state.permissions,"Store"

سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 4 سال پیش مطرح شد
0

برای verb ها باید بفهمی که اون api چه نوع درخواستی باید فرستاده بشه آیا GET یا POST یا DELETE؟
مثلا تو axios متد GET اینجوریه :

axios({
  method: 'get',
  url: 'http://bit.ly/2mTM3nY',
  responseType: 'stream'
})
  .then(function (response) {
    response.data.pipe(fs.createWriteStream('ada_lovelace.jpg'))
  });

و این سرور کار باید بگه هر api رو با چه متدی ارسال کنید
پس این هم به همان صورت قبل فقط این سری متد ها رو چک کنید و اگر اجازه ارسال هر متدی داشت بهش اجازه بدهید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام