কৌণিক - ভূমিকা এবং সত্তার স্থিতির উপর ভিত্তি করে অনুমতি কীভাবে চেক করবেন

আজকাল, আপনার অ্যাপ্লিকেশনটি প্রমাণীকরণ এবং অনুমোদনের প্রক্রিয়াতে থাকা সাধারণ। আপনি যদি ওয়েবে অনুমোদনের লাইব্রেরি এবং কৌশলগুলির সন্ধান করেন তবে আপনি সহজেই এমন সমাধানগুলি খুঁজে পেতে পারেন যা কেবল ভূমিকা-ভিত্তিক অনুমোদনের প্রস্তাব দেয় তবে এটি কোনও পৃষ্ঠায় অ্যাক্সেস প্রতিরোধ করে It প্রায়শই এটি ঘটে থাকে যে সত্তার স্থিতির জন্য আপনার আলাদা অনুমোদনের প্রয়োজন।

টিএল জন্য; এখানে DR ডেমো এবং ডেমোতে ব্যবহৃত কোড।

চিত্র ক্রেডিট

সত্তা রাষ্ট্রের অনুমোদন কী?

ঠিক আছে, আমি মনে করি এই পোস্টটি লেখার সময় আমার নাম লেখার চেয়ে ভাল আর কিছুই ছিল না। তবে, কম-বেশি যা আমি বলতে চাইছি সেগুলির সাথে সম্পর্কিত যেখানে আপনার বর্তমান সত্তার স্থিতি এক্স স্ট্যাটাসের উপর নির্ভর করে যখন আপনাকে কোনও নির্দিষ্ট পদক্ষেপ নেওয়ার ক্ষমতা থেকে বর্তমান ব্যবহারকারীকে বা বঞ্চিত করতে হবে সত্তাটি সক্ষম হওয়ার সময় ক্ষমতা ওয়াই রাষ্ট্রকে সেট করে এবং সবচেয়ে খারাপ পরিস্থিতি এলো যখন এই সমস্তগুলি একই পর্দায় বা এমনকি একই উপাদানটিতে ছিল। ভূমিকা বেস অনুমোদনের সমস্ত লাইব্রেরি আপনাকে এই সমস্যাটি সংরক্ষণ করে। আমি বিভিন্ন নিবন্ধগুলি পড়তে ক্লান্ত হয়ে পড়েছিলাম যার মধ্যে ভূমিকা-ভিত্তিক পৃষ্ঠাগুলি সমাধানগুলি প্রতিরোধ করে এবং কিছু মনে না রেখে চিন্তাভাবনা এবং প্রোগ্রামিং শুরু করে। হঠাৎ আমি এই ধরণের সমস্যার একটি সহজ, জটিল এবং খুব নমনীয় সমাধান পেয়েছি, যার চারটি অংশ রয়েছে।

  • বর্তমান ব্যবহারকারীর তথ্য সরবরাহ করার জন্য একটি পরিষেবা (বর্তমান বিষয়টি কী গুরুত্বপূর্ণ তা ব্যবহারকারীর ভূমিকা নির্দিষ্ট করার একটি উপায় যা বর্তমান ব্যবহারকারীর অন্তর্ভুক্ত বা অ্যাপ্লিকেশনটিতে তাদের দেওয়া হয়েছে)।
  • একটি কর্মপ্রবাহ অনুমোদনের কার্ড (জেএসএন ফাইল)
  • একটি অনুমোদন পরিষেবা যা অনুমোদনের চেক সম্পাদন করে
  • অনুমোদন পরিষেবা যাচাই করার জন্য একটি নির্দেশ

পদক্ষেপ 1: বর্তমান ব্যবহারকারীর ভূমিকা পান

সার্ভারের পক্ষ থেকে (প্রথমবারের মতো) বা কোনও সেশন বা কুকিজ থেকে পরবর্তী ব্যবহারের জন্য পছন্দ হিসাবে পুনরুদ্ধার করতে একটি পরিষেবা প্রয়োগ করুন। দক্ষতার (ভূমিকা) ব্যবহারকারীর তালিকা সরবরাহ করা গুরুত্বপূর্ণ।

// উদাহরণ {নাম: "জন দো", ইমেল: '[email protected]', ভূমিকা: ['বিক্রেতা', 'বিক্রেতা_ব্যবস্থাপনা'], <- এটি অ্যাক্সেস টোকেনের উপর নির্ভর করে: 'অ্যালোটোফ্লেটারস, ডায়ান্যাসেসস্টোকেনহাহাহা!' ... আরও স্টাফ
}

আমার ক্ষেত্রে এটি কমবেশি এর মতো দেখাচ্ছে:

// এখানে আমদানি করুন ...
@ ইনজেক্টেবল () এক্সপোর্ট ক্লাস কারেন্ট ইউজারসেসওয়্যার {প্রাইভেট ইউজারসুবজেক্ট = নতুন রিপ্লেসুবজেক্ট (1); বেসরকারী hasUser = মিথ্যা; কনস্ট্রাক্টর (প্রাইভেট ইউজারসপি: ইউজারএপিআই)}} পাবলিক গেট ইউজার (): পর্যবেক্ষণযোগ্য {if (! this.hasUser) {this.fetchUser (); this this.userSubject.asObservable () ফিরিয়ে দিন; fet পাবলিক ফেচুউসার (): অকার্যকর {this.usersApi.getCurrent () // <== HTTP কলটি ব্যবহারকারীর জন্য পেতে পারেন s সাবস্ক্রাইব (ব্যবহারকারী => {// ব্যবহারকারীর এই অনুমোদিত হওয়া উচিত ভূমিকাটি থাকতে হবে = ব্যবহারকারী = সত্য; এটি। userSubject.next (ব্যবহারকারী); this.userSubject.complete ();}, (ত্রুটি) =>। this.hasUser = মিথ্যা; this.userSubject.error (ত্রুটি);}); }}

দ্বিতীয় পদক্ষেপ: আপনার কর্মপ্রবাহ এবং অনুমোদনের ওভারভিউ তৈরি করুন

এটি বিভিন্ন সত্তা এবং তাদের নিজস্ব রাজ্যগুলির সাথে একটি গাছ তৈরি করে আমরা কী করতে পারি এবং কারা করতে পারি তার উদাহরণ ছাড়া আর কিছুই নয়। উদাহরণস্বরূপ, নিম্নলিখিত বিক্রয় প্রক্রিয়াটি বিবেচনা করুন: আমাদের অ্যাপ্লিকেশনটিতে একাধিক রোল টাইপ থাকতে পারে। আমাদের উদাহরণস্বরূপ, আমরা বিক্রয়কারীকে, শিল্প নিদর্শনগুলি এবং গ্রাহককে ভূমিকাগুলি অর্পণ করি।

যাতে আমরা প্রক্রিয়া সম্পর্কে কথা বলতে না:

  • প্রথমত, বিক্রেতা নতুন সুযোগ যুক্ত ক্রিয়া সম্পাদন করে একটি সুযোগ রাখে, যা সম্ভবত সুযোগের অবস্থান তৈরি করে
  • এই মুহুর্তে, গ্রাহক ও বিক্রেতারা সুযোগগুলিতে প্রয়োজনীয়তা যুক্ত করতে পারে যাতে প্রয়োজনীয়তাগুলি তৈরি করার সময় উভয়ই প্রয়োজনীয় সংযোজন ক্রিয়াটি ব্যবহার করতে পারে। সুযোগের স্থিতি জমা দেওয়াতে পরিবর্তিত হতে পারে
  • প্রয়োজনীয়তাগুলি পূরণ হওয়ার পরে, শিল্প একটি সমাধান যুক্ত করতে চায় যাতে কোনও ক্রিয়া প্রয়োজন: সমাধানটি আপলোড করুন এবং স্থিতিটি সমাধান হতে পারে
  • একবার সমাধান স্থাপনের পরে, গ্রাহকরা এটি গ্রহণ করতে চাইতে পারেন যাতে সমাধানটি অনুমোদনের জন্য একটি পদক্ষেপের প্রয়োজন হয় এবং স্থিতিটি সমাধান_এ অনুমোদিত হয়

আমরা এখানে প্রক্রিয়াটি সংক্ষিপ্ত করব, অন্যথায় এটি খুব বেশি বাড়বে এবং এই পড়ার ক্ষেত্রে এটি নয়। এই প্রক্রিয়াটির উপর ভিত্তি করে, ম্যাপিং এবং এই ধারণাটি গ্রহণ করে যে সুযোগ সত্তার স্ট্যাটাস ট্র্যাকিংয়ের ক্ষেত্র রয়েছে, আমাদের ওয়ার্কফ্লোটি এটির মতো দেখাবে:

Opp "সুযোগ": {"অ্যাডঅপার্পুরিটিউশন": allowed "অনুমোদিতরোলস": ["বিক্রেতা"]}}, "তৈরি": add "অ্যাড রিকোয়ারমেন্ট": allowed "অনুমোদিতরোলস": ["বিক্রেতা", "ক্লায়েন্ট"]}}, " জমা দেওয়া ": {" অ্যাডসলিউশন ": allowed" অনুমোদিতরোলস ": [" নিবন্ধ "]}}," সমাধান ": appro" অনুমোদিত সমাধান ": allowed" অনুমোদিত রোলস ": [" ক্লায়েন্ট "]}}}}

পদক্ষেপ 3: কর্মপ্রবাহ এবং অনুমোদনের ওভারভিউ ব্যবহার করার জন্য যাচাইকরণ অনুমোদন পরিষেবা

কার্যপ্রবাহ এবং অনুমতি ম্যাপিংয়ে প্রক্রিয়াটি ম্যাপ করার পরে আমাদের এটি ব্যবহারের জন্য একটি পরিষেবা তৈরি করতে হবে এবং ব্যবহারকারীর অনুমোদিত কিনা তা যাচাই করা উচিত। এটি এর মতো দেখতে পারে:

// এখানে নির্দেশাবলী আমদানি করুন // যাইহোক, কৌণিক-ক্লায়লে আমরা জেএসএন ফাইলটি // পরিবেশগত.টায় রাখতে পারি
@ ইনজেক্টেবল () রফতানি ক্লাস ওয়ার্কফ্লো ইভেন্টস {কেবল পঠনযোগ্য ব্যক্তিগত ওয়ার্কফ্লাও_আভিএনটিস = পরিবেশ ['ওয়ার্কফ্লো']; বেসরকারী ব্যবহারকারী রোলস: সেট ;
// আপনি কি পদক্ষেপ 1 মনে আছে? এটি এখানে কনস্ট্রাক্টর ব্যবহার করা হয় (বেসরকারী কারেন্ট ইউজারসেবা: কারেন্ট ইউজারসেসভার) {} // একটি বুলিয়ান পর্যবেক্ষণযোগ্য পাবলিক চেক অনুমোদন দেয় (পথ: যে কোনও): পর্যবেক্ষণযোগ্য {// আমরা কেবল তখনই ভূমিকাগুলি লোড করি যদি (! এটি.উসাররোলস) this this.cર્નUserService.getUser () .ম্যাপ (বর্তমান ব্যবহারকারী => কারেন্ট ইউজার.রোলেস) .ডো (ভূমিকা => {কনস্ট ভূমিকা = ভূমিকা.map ( ভূমিকা => ভূমিকা.name); this.userRoles = নতুন সেট (ভূমিকা);}) .ম্যাপ (ভূমিকা => this.doCheckAuthorization (পথ)); Ob Observable.of (this.doCheckAuthorization (path)) ফিরিয়ে দিন; } বেসরকারী doCheckAuthorization (পাথ: স্ট্রিং []): বুলিয়ান {if (path.length) {কনস্ট এন্ট্রি = this.findEntry (this.WORKFLOW_EVENTS, পাথ); যদি (এন্ট্রি && এন্ট্রি ['অনুমোদিতরোলস']] এবং & this.userRoles.size) {এন্ট্রি.প্রেসিডরোলস রিটার্ন করুন ome কিছু (অনুমোদিত রোল => this.userRoles.has (অনুমোদিত রোল)); false মিথ্যা প্রত্যাবর্তন; false মিথ্যা প্রত্যাবর্তন; }
/ ** * পাথ স্ট্রিংয়ের উপর ভিত্তি করে ওয়ার্কফ্লো মানচিত্রের প্রবেশের জন্য পুনরাবৃত্তি অনুসন্ধান করুন * / প্রাইভেট ফাইন্ডএন্ট্রি (কারেন্টবজেক্ট: যে কোনও, কী: স্ট্রিং [], সূচক = 0) {কনট কী = কীস [সূচক]; যদি (কারেন্টবজেক্ট [কী] && সূচক)

মূলত, আপনাকে একটি বৈধ এন্ট্রি অনুসন্ধান করতে হবে এবং বর্তমান ব্যবহারকারী ভূমিকাগুলি অনুমোদিত রোলগুলিতে অন্তর্ভুক্ত রয়েছে কিনা তা পরীক্ষা করতে হবে।

ফাইল 4: নীতি

আমাদের বর্তমান ব্যবহারকারীর ভূমিকা, একটি ওয়ার্কফ্লো অনুমোদনের গাছ এবং বর্তমান ব্যবহারকারীর ভূমিকার জন্য অনুমোদন পরীক্ষা করার জন্য একটি পরিষেবা করার পরে, আমাদের এটি নির্দেশের মাধ্যমে 2/4 কোণে প্রয়োগ করতে হবে। মূলত, আমি যে নির্দেশনাটি লিখেছি তা হ'ল একটি গুনের নির্দেশনা যা ডিসপ্লে সিএসএস অ্যাট্রিবিউট টগল করে। যাইহোক, এটি পারফরম্যান্স সমস্যার কারণ হতে পারে কারণ DOM এ সঞ্চিত উপাদানগুলি এখনও লোড রয়েছে। সুতরাং, কাঠামোগত নির্দেশাবলী ব্যবহার করা ভাল (এই ভাল ক্যাচের জন্য আমার সহকর্মী পিটিও চোলকভকে ধন্যবাদ (এখানে পার্থক্য দেখুন) কারণ আমরা অব্যবহৃত উপাদানগুলি লোড করা এড়াতে লক্ষ্য উপাদান এবং এর বংশধরের DOM পরিবর্তন করতে পারি।

@ ডাইরেক্টিভ ({নির্বাচক: '[appCanAccess]'}) রফতানি শ্রেণি CanAccessDirective OnInit, OnDestroy প্রয়োগ করে {@ ইনপুট ('appCanAccess') অ্যাপক্যানঅ্যাক্সেস: স্ট্রিং | স্ট্রিং []; ব্যক্তিগত অনুমতি per: সাবস্ক্রিপশন; কনস্ট্রাক্টর (বেসরকারী টেমপ্লেটফেলা: টেমপ্লেট রাফ , প্রাইভেট ভিউ কনটেনার: ভিউকন্টেইনারআরফ, প্রাইভেট ওয়ার্কফ্লো এজেন্টস: ওয়ার্কফ্লো ইভেন্টস) oid g ngOnInit (): অকার্যকর {this.applyPermission (); } বেসরকারী প্রয়োগপর্বরণ (): অকার্যকর {this.permission $ = this. workflowEvents। চেকঅধিকারিকেশন (এটি.অ্যাপক্যানঅ্যাক্সেস)। সাবস্ক্রাইব (অনুমোদিত => {যদি (অনুমোদিত) {this.viewContainer.createE এম্বেডভিউ (এটি.প্লেম্যাটরেফ);} অন্যটি {এটি .ভিউকন্টেইনার.ক্রিয়ার ();}}); ; ngOnDestroy (): অকার্যকর {this.permission $ .উনসসক্রাইব (); }}

শেষ পর্যন্ত ফলাফল কাজ

এখন আমাদের প্রয়োজন কেবলমাত্র এটি এটিকে অনুশীলন করা। আমাদের এইচটিএমএল টেমপ্লেটে কেবলমাত্র আমাদের যা করতে হবে তা হ'ল নিম্নলিখিত কোড

ধরা যাক আমাদের একটি নমুনা উপাদান রয়েছে যাতে সুযোগের অবজেক্ট থাকে:

@ উপাদান ({নির্বাচক: 'এসপি-দাম-প্যানেল', টেমপ্লেট: `` 
 
 
 
 ;}) রফতানি ক্লাসের নমুনা কম্পোনেন্টটি অন-ইনিট প্রয়োগ করে {@ ইনপুট () সুযোগঅবজেক্ট: যে কোনও;
ডিজাইনার () {} ngOnInit () {}}

এবং এটি হ'ল আমাদের একটি সাধারণ উপাদান থাকতে পারে যা ব্যবহারকারীর ভূমিকা এবং সত্তার স্থিতির উপর ভিত্তি করে আচরণকে উপস্থাপন করে।

আমার খারাপ কোডিংয়ের সমালোচনা ও সমালোচনা করার জন্য আমার সহকর্মী পিতিও এবং গোবিন্দকে ধন্যবাদ, আমরা আমাদের সমাধানটি পুরোপুরি আমাদের প্রয়োজন অনুসারে সমাধান করতে সক্ষম হয়েছি। আমি আশা করি এটি আপনাকেও সহায়তা করবে

জুন 2018, ছোট কাজের নমুনা => https://emsedano.github.io/ng-entity-state/

আরো দেখুন

অ্যান্ড্রয়েড বিকাশকারী হওয়ার জন্য জাভা সম্পর্কে আমার কতটা ভাল জানা উচিত? কিভাবে একটি কনসার্টের জন্য কাপড় - চোপড় আপআমার ওয়েবসাইটে আমার প্রচুর পৃষ্ঠা রয়েছে এবং কিছু পুরানো পৃষ্ঠাগুলি নেভিগেশনে 50 তম পৃষ্ঠাতে চলে গেছে। সমস্ত পৃষ্ঠাগুলি হোম পৃষ্ঠার সাথে লিঙ্ক করা যায় না বলে আমি কীভাবে এই জাতীয় পৃষ্ঠাগুলির নাগালের ক্ষমতা উন্নত করব?আমি ইউআই / ইউএক্স ডিজাইনার হিসাবে কীভাবে ফ্রিল্যান্সের কাজ পেতে পারি? কেউ প্রথমবারের জন্য একটি সত্যিকারের ওয়েবসাইট ডিজাইন করতে কত সময় নেয়? আমার কাছে একটি অ্যাপ / ওয়েবসাইটের জন্য ধারণা আছে; তবে এই প্রক্রিয়াটিতে কীভাবে এগিয়ে যেতে হবে তা আমি জানি না। একটি সাধারণ ধারণা থাকার পরে আমার কী করা উচিত?ওয়ার্ডপ্রেস উন্নত ওয়েবসাইটের জন্য আপনার দুর্দান্ত এসইও রয়েছে কীভাবে আপনি নিশ্চিত করবেন? ইনস্টাগ্রাম বার্তা সংরক্ষণ কিভাবে