একাধিক অনুমতি ধরনের হ্যান্ডেল করার সেরা উপায় কি?

আমি প্রায়ই নিম্নলিখিত দৃশ্যকল্প সম্মুখীন যেখানে আমি অনুমতি অনেক বিভিন্ন ধরনের অফার প্রয়োজন। আমি প্রাথমিকভাবে ASP.NET / VB.NET SQL Server 2000 এর সাথে ব্যবহার করি।

এ দৃশ্যপট

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

অতীতে, আমি এই দুটি উপায় বেছে নিই যা আমি এই কাজ করতে জানি।

1) বিশেষ কলামগুলির সাহায্যে একক অনুমতি টেবিলের ব্যবহার করুন যা পরামিতিগুলি প্রয়োগ করার পদ্ধতি নির্ধারণের জন্য ব্যবহৃত হয়। এই উদাহরণে বিশেষ কলামগুলি TypeID এবং TypeAuxID। এসকিউএল এই মত কিছু চেহারা হবে।

SELECT COUNT(PermissionID)
FROM application_permissions
WHERE
(TypeID = 1 AND TypeAuxID = @UserID) OR
(TypeID = 2 AND TypeAuxID = @DepartmentID)
AND ApplicationID = 1

2) অনুমতি প্রতিটি ধরনের জন্য একটি ম্যাপিং টেবিলের ব্যবহার করুন, তারপর তাদের সব একসাথে যোগদান।

SELECT COUNT(perm.PermissionID)
FROM application_permissions perm
LEFT JOIN application_UserPermissions emp
ON perm.ApplicationID = emp.ApplicationID
LEFT JOIN application_DepartmentPermissions dept
ON perm.ApplicationID = dept.ApplicationID
WHERE [email protected]
  AND ([email protected] OR [email protected] OR
 (emp.UserID IS NULL AND dept.DeptID IS NULL)) AND ApplicationID = 1
ORDER BY q.QID ASC

আমার মতামত

আমি আশা করি যে উদাহরণগুলি অনুমান করা হবে। আমি তাদের একসঙ্গে cobbled।

প্রথম উদাহরণ কম কাজ প্রয়োজন, কিন্তু তাদের উভয়েরই সেরা উত্তরের মত মনে হয়। এই সামলাতে একটি ভাল উপায় আছে?

0

5 উত্তর

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

দুঃখিত যদি আমি আপনার প্রশ্নের উত্তর না করে থাকি, আমি এমন লোকের মতো, যিনি C# শিখতে বলেন যখন কেউ vb প্রশ্ন জিজ্ঞেস করে।

0
যোগ

আমি বিভিন্ন অ্যাপ্লিকেশন ব্যবহার করেছি একটি পদ্ধতি একটি জেনেরিক PermissionToken ক্লাস যা পরিবর্তনশীল মান সম্পত্তি আছে আছে। তারপর আপনি অনুরোধকৃত অ্যাপ্লিকেশনটি ক্যোয়ারী করুন, এটি আপনাকে বলছে এটি ব্যবহার করার জন্য অনুমতির টোকেনগুলি কি প্রয়োজন।

উদাহরণস্বরূপ, শিপিং অ্যাপ্লিকেশন আপনাকে এটি বলার প্রয়োজন হতে পারে:

new PermissionToken()
{
    Target = PermissionTokenTarget.Application,
    Action = PermissionTokenAction.View,
    Value = "ShippingApp"
};

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

0
যোগ

জন ড্যুনি এবং জেডিসিউয়ার এর সমাধান ছাড়াও, বিটফিল্ডের শেষ / প্রারম্ভে আমি একটি "স্পষ্ট অস্বীকৃতি" বিট যোগ করেছি, যাতে আপনি গ্রুপ, ভূমিকা সদস্যপদ দ্বারা যোগব্যায়াম অনুমতিগুলি সম্পাদন করতে পারেন, এবং তারপর স্পষ্ট অস্বীকারের উপর ভিত্তি করে অনুমতি বিয়োগ করতে পারেন এনটিএফএসের মত কাজ করে প্রবেশাধিকার, অনুমতি-অনুসারে।

0
যোগ

আমি জন ড্যুনির সাথে একমত

ব্যক্তিগতভাবে, আমি কখনো কখনো অনুমতিগুলির একটি পতাকাঙ্কিত গণনা ব্যবহার করি। এই ভাবে আপনি গণনা আইটেম এর এবং, OR, না এবং XOR bitwise অপারেশনগুলি ব্যবহার করতে পারেন।

"[Flags]
public enum Permission
{
    VIEWUSERS = 1, // 2^0 // 0000 0001
    EDITUSERS = 2, // 2^1 // 0000 0010
    VIEWPRODUCTS = 4, // 2^2 // 0000 0100
    EDITPRODUCTS = 8, // 2^3 // 0000 1000
    VIEWCLIENTS = 16, // 2^4 // 0001 0000
    EDITCLIENTS = 32, // 2^5 // 0010 0000
    DELETECLIENTS = 64, // 2^6 // 0100 0000
}"

Then, you can combine several permissions using the AND bitwise operator.

For example, if a user can view & edit users, the binary result of the operation is 0000 0011 which converted to decimal is 3.
You can then store the permission of one user into a single column of your DataBase (in our case it would be 3).

Inside your application, you just need another bitwise operation (OR) to verify if a user has a particular permission or not.

0
যোগ
আমি এই পদ্ধতির সঙ্গে পাওয়া সমস্যা এই পদ্ধতির ব্যবহার করে ভূমিকা রান আউট সত্যিই সহজ। আপনি দেখতে পারেন 6 টি ভূমির 2 ^ 6 = 64 এর মান আছে, যখন 31 টি ভূমিতে ২ ^ 31 = ২,147,483,647 থাকবে যা সর্বোচ্চ ইন্ট্লু মান। তাই টি-এসকিউএলের সবচেয়ে বড় ডাটা টাইপ যা ব্যবহার করা যায় bigint (2 ^ 63)। অবশ্যই আপনি varchar প্রকার ব্যবহার করতে পারেন, কিন্তু আমি অনেক ভূমিকা আছে যখন আমি জন Downey এর সমাধান ব্যবহার করতে পছন্দ করি।
যোগ লেখক Maksim Vi., উৎস

আমি সাধারণত কোডিং অনুমতি সিস্টেম সম্পর্কে যেতে উপায় 6 টেবিল হচ্ছে।

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

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

আমি যেমন আমি সাধারণত এটি কি মত বলেন কিন্তু আপনার millage আলাদা হতে পারে।

0
যোগ