একটি অনুমোদিত অনুমতি বা "অধিকার" হিসাবে গ্র্যান্টডঅর্থারিটি হিসাবে ভাবেন। সেই "অনুমতিগুলি" (সাধারণত) স্ট্রিং হিসাবে প্রকাশ করা হয় ( getAuthority()
পদ্ধতি সহ)। এই স্ট্রিংগুলি আপনাকে অনুমতিগুলি সনাক্ত করতে দেয় এবং আপনার ভোটারদের কোনও কিছুর অ্যাক্সেস দেয় কিনা তা সিদ্ধান্ত নিতে দেয়।
আপনি ব্যবহারকারীদের সুরক্ষা প্রসঙ্গে রেখে বিভিন্ন মঞ্জুরিপ্রাপ্ত অনুমোদন (অনুমতি) দিতে পারেন। আপনি সাধারণত নিজের ইউজারডেটেলস সার্ভিস প্রয়োগ করে একটি ইউজারডেটেল বাস্তবায়ন ফিরিয়ে দেন যা প্রয়োজনীয় গ্রান্টড অথরিটিজগুলি প্রদান করে।
ভূমিকা (যেমন তারা অনেক উদাহরণে ব্যবহৃত হয়) নামকরণের কনভেনশনের সাথে কেবল "অনুমতি" থাকে যা বলে যে একটি ভূমিকা একটি গ্রান্টডঅর্টিটি হয় যা উপসর্গ দিয়ে শুরু হয় ROLE_
। এর চেয়ে বেশি কিছুই নেই। একটি ভূমিকা কেবল একটি অনুমোদিত অনুমতি - একটি "অনুমতি" - একটি "অধিকার"। আপনি বসন্ত সুরক্ষার অনেক জায়গাগুলি দেখতে পান যেখানে এর ROLE_
উপসর্গের ভূমিকাটি বিশেষত উদাহরণস্বরূপ রোলভোটারে পরিচালিত হয়, যেখানে ROLE_
উপসর্গটি ডিফল্ট হিসাবে ব্যবহৃত হয়। এটি আপনাকে ROLE_
উপসর্গের বাইরেও ভূমিকাটির নাম সরবরাহ করতে দেয় । স্প্রিং সিকিউরিটি 4 এর আগে, "ভূমিকা" এর এই বিশেষ পরিচালনাটি খুব ধারাবাহিকভাবে অনুসরণ করা হয়নি এবং কর্তৃপক্ষ এবং ভূমিকাগুলি প্রায়শই একইরকম আচরণ করা হয় (যেমন আপনি যেমনhasAuthority()
hasRole()
)। স্প্রিং সিকিউরিটি 4 এর সাথে, ভূমিকার চিকিত্সা আরও সুসংগত এবং কোড যা "রোল" এর সাথে সম্পর্কিত (যেমন RoleVoter
, hasRole
এক্সপ্রেশন ইত্যাদি) সর্বদা ROLE_
আপনার জন্য উপসর্গ যুক্ত করে । সুতরাং এর hasAuthority('ROLE_ADMIN')
অর্থ একই hasRole('ADMIN')
কারণ ROLE_
উপসর্গটি স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যায়। আরও তথ্যের জন্য বসন্ত সুরক্ষা 3 থেকে 4 মাইগ্রেশন গাইড দেখুন ।
তবে তবুও: একটি ভূমিকা কেবল একটি বিশেষ ROLE_
উপসর্গ সহ একটি কর্তৃপক্ষ । স্প্রিং নিরাপত্তা 3 তাই @PreAuthorize("hasRole('ROLE_XYZ')")
একই হিসাবে @PreAuthorize("hasAuthority('ROLE_XYZ')")
এবং বসন্ত নিরাপত্তা 4 @PreAuthorize("hasRole('XYZ')")
হিসাবে একই @PreAuthorize("hasAuthority('ROLE_XYZ')")
।
আপনার ব্যবহারের ক্ষেত্রে:
ব্যবহারকারীদের ভূমিকা আছে এবং ভূমিকা কিছু নির্দিষ্ট ক্রিয়াকলাপ সম্পাদন করতে পারে।
GrantedAuthorities
কোনও ব্যবহারকারীর ভূমিকা এবং অপারেশনগুলি কোনও ভূমিকা পালন করতে পারে তার জন্য আপনি শেষ করতে পারেন। GrantedAuthorities
ভূমিকা প্রিফিক্স আছে ROLE_
এবং অপারেশন উপসর্গ আছে OP_
। একটি উদাহরণ অপারেশন কর্তৃপক্ষ হতে পারে জন্য OP_DELETE_ACCOUNT
, OP_CREATE_USER
, OP_RUN_BATCH_JOB
ইত্যাদি ভূমিকা হতে পারে ROLE_ADMIN
, ROLE_USER
, ROLE_OWNER
ইত্যাদি
আপনি আপনার সত্তাগুলি GrantedAuthority
এই (সিউডো কোড) উদাহরণের মতো প্রয়োগ করতে পারেন:
@Entity
class Role implements GrantedAuthority {
@Id
private String id;
@ManyToMany
private final List<Operation> allowedOperations = new ArrayList<>();
@Override
public String getAuthority() {
return id;
}
public Collection<GrantedAuthority> getAllowedOperations() {
return allowedOperations;
}
}
@Entity
class User {
@Id
private String id;
@ManyToMany
private final List<Role> roles = new ArrayList<>();
public Collection<Role> getRoles() {
return roles;
}
}
@Entity
class Operation implements GrantedAuthority {
@Id
private String id;
@Override
public String getAuthority() {
return id;
}
}
ভূমিকা ও অপারেশনের আইডি আপনি আপনার ডাটাবেসের মধ্যে তৈরি GrantedAuthority উপস্থাপনা, যেমন হবে ROLE_ADMIN
, OP_DELETE_ACCOUNT
ইত্যাদি যখন একজন ব্যবহারকারী অনুমোদন যাচাই করা হয়, নিশ্চিত করুন যে সব তার ভূমিকা সব GrantedAuthorities এবং সংশ্লিষ্ট অপারেশন UserDetails.getAuthorities থেকে প্রত্যাগত হয় তা নিশ্চিত () পদ্ধতি।
উদাহরণ: আইডি সহ প্রশাসকের ভূমিকা ROLE_ADMIN
অপারেশন হয়েছে OP_DELETE_ACCOUNT
, OP_READ_ACCOUNT
, OP_RUN_BATCH_JOB
এটি নির্ধারিত হয়। আইডি সহ ব্যবহারকারীর ভূমিকাটির ROLE_USER
অপারেশন রয়েছে OP_READ_ACCOUNT
।
ফলে নিরাপত্তা প্রেক্ষাপটে একজন প্রশাসক লগ GrantedAuthorities থাকবে এমন:
ROLE_ADMIN
, OP_DELETE_ACCOUNT
, OP_READ_ACCOUNT
,OP_RUN_BATCH_JOB
কোনো ইউজারের লগ তাহলে এটি হবে:
ROLE_USER
,OP_READ_ACCOUNT
ইউজারডেটেলস সার্ভিস সেই সমস্ত ভূমিকা এবং সমস্ত ক্রিয়াকলাপ সংগ্রহ এবং ফিরিয়ে নেওয়া ইউজার-ডেটা দের উদাহরণে getAuthorities () পদ্ধতি দ্বারা তাদের উপলব্ধ করার জন্য যত্ন নেবে।